Linux服务器编程 基本API与概念

发布时间 2023-09-23 12:05:51作者: Cyj8818

Linux服务器编程

基本API与概念

  • 基本参数和结构体

  • 协议族参数:PF_UNIX,PF_INET,PF_INET6;

  • 地址族参数(sa_family_t):AF_UNIX,AF_INET,AF_INET6;

  • 服务类型参数:

    • SOCK_STREAM流服务;SOCK_UGRAM数据报服务;
    • 与SOCK_NONEBLOCK相与 非阻塞类型;与SOCK_CLOEXEC相与 fork子进程在子进程中关闭socket
  • 错误信息

    • ECONNREFUSED:目标端口不存在
    • ETIMEOUT:连接超时
  • 通用socket地址结构体:sockaddr_storge

    • sa_family;int_ss_align
  • 专用socket地址结构体:sockaddr_un;sockaddr_in;sockaddr_in6

    • sin_family

    • sin_port(需用网络字节序表示):转换函数htons()htonl()

    • IPv4地址结构体:in_addr;IPv6地址结构体:in6_addr

      • 内含地址值s_addr;sa_addr[16](需用网络字节序表示):转换函数inet_pton()
    • 专用socket地址作为参数传入时需要强转为sockadrr类型

    • struct socketaddr_in address; //定义一个IPv4的socket专用地址
      bzero(&address,sizeof(address))//将该结构体的前n个字节清零
      address.sin_family=AF_INET    //为专用地址选择地址族参数
      address.sin_port=htons(port)  //为专用地址端口号赋值(转化为网络字节序)
      inet_pton(AF_INET,ip,&address.sin_addr)//为专用地址ipv4地址值赋值(转化为网络字节序)
      
  • 常用socket文件描述符属性参数

    • SO_REUSEADDR:复用处于TIME_WAIT状态的socket
    • SO_RCVBUF和SO_SNDBUF:表示TCP接收缓冲区和发送缓冲区的大小
    • SO_RCVLOWAT和SO_SNDLOWAT:TCP接收缓冲区和发送缓冲区的低水位标志,当可读数据大于低水位时,IO复用系统调用告知应用程序可以读数据;当发送区中空闲空间大于低水位时,IO复用系统调用告知应用程序可以写数据,默认为1字节
    • SO_LINGER:通过传入一个linger类型的结构体,通过该结构体中的 l_onoffl_linger两个参数控制close()函数的具体行为
  • 携带主机信息的hostent结构体:h_name主机名;h_aliases主机别名列表;h_addrtype地址族;h_length地址长度;h_addr_list按网络字节序列出的主机IP地址列表

  • 携带服务信息的servent结构体:s_name服务名;s_aliases服务别名列表;s_port端口号;s_proto服务类型(tcp或udp或其他)

  • 描述资源限制的rlimit结构:rlim_t类型:描述资源级别的整数类型;rlim_cur:指定资源的软限制(最好不要超过的限制);rlim_max:指定资源的硬限制(软限制的上限)