通常调用close函数对socket进行关闭,为啥还要选用shutdown来关闭socket,原因有如下两个:
1).在介绍close的时候,已经说明了,close只有在对应socket的引用计数为0时,才会真正发送FIN报文来关闭这个连接。shutdown没有这个限制,直接发送FIN报文。
2).close同时终止了读和写两个方向的数据传输。但是TCP的双工的,我们有时候需要只接受数据,而不发送数据。shutdown可以结束这个问题。
函数原型:
int shutdown(int fd, int how);
1)how为SHUT_RD(关闭读端),则无法从套接字读取数据;-------不发送FIN
2)how为SHUT_WR(关闭写端),则无法从套接字写数据;---------发送FIN
3)how为SHUT_RDWR(关闭读写),则无法从套接字读和写数据;-------发送FIN
如果只想告诉对端,本端已无数据需要发送,但是可以接受对端的数据,则使用如下调用:
shutdown(fd,SHUT_WR);----------半关闭,得知shutdown SHUT_WR时会发送FIN报文,而SHUT_RD只是接收以后都扔掉,并不会发送FIN报文
阅读(834) | 评论(0) | 转发(0) |