这篇主要是对我前一篇SOCKET网络编程的拓展。其实再认真看一下,那篇算是我博客里面比较好的。
补充1:
sockaddr和sockaddr_in的抉择:
前者是通用的套接字结构体,它可以在不同的协议族之间进行强转。
后者是以太网中采用的套接字结构体,因为前面那个不好用。
由于两个结构体的大小一致,所以进行地址结构设置的时候,通常的方法是使用后者进行配置,然后强制转换为前者的结构体类型,这样不会有任何副作用。
补充2:
以太网中建议使用PF_INET这个域。在程序设计时会发现有的代码使用的是AF_INET,在头文件中这两个值是一致的,我也经常写AF_INET,不过还是有细微的差别,PF_INET有些协议类型是AF_INET所没有实现的
补充3:
···
struct sockaddr_in myaddr;
···
bzero(&(my_addr.sin_zero),8);
···
//我个人觉得挺细节的,把预留空间清空
补充4:
函数listen用来初始化服务器可连接队列。
服务器处理客户端连接时是顺序处理的,同一时间只能处理一个客户端连接。
当多个客户端的连接请求同时到来的时候,服务器将不能处理的客户端连接请求放入到等待队列中,这个队列的长度由listen()函数来指定。
大多数系统的设置为20,其实真的没必要太多,真的。
根据系统的可承受负载和程序的需求来确定。
系统有一个最大侦听队列数,一般是128(somaxconn),可以调优。
补充5:
关闭套接字函数不止一个close,还有shutdown。
int shutdown(int sock,int how);
//该函数用于关闭双向连接的一部分。
/*
how:
SHUT_RD:值为0,表示切断读
SHUT_WR:值为1,表示切断写
SHUT_RDWR:值为2,和close功能相同
*/