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_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:指定资源的硬限制(软限制的上限)