TCP网络编程(拓展篇)

这篇主要是对我前一篇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功能相同
*/

shutdown和close的区别

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章