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()
- 内含地址值s_addr;sa_addr[16](需用网络字节序表示):转换函数
-
专用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_onoff
和l_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:指定资源的硬限制(软限制的上限)