套接字 中 shutdown与close区别

  • Post author:
  • Post category:其他



1. int shutdown ( int s ,  int how )


how=0 关闭接收端,unix下会刷新输入队列,丢弃在tcp/ip 栈中的应用程序还未读到的数据,如果还有新数据到来,tcp会进行ACK确认,但是数据也还是会丢弃,反正应用程序将收不到数据,即使已经到达了内核。windows下会重置连接。(套接字 用how=0 shutdown,如果再对他进行读操作,返回EOF)


how=1 将发送缓冲区数据都发送出去,tcp最后还会发送FIN,通知对方没有数据要发了。


how=2 相当于分别进行两次shutdown,一次how=0,一次how=1。但是与close是有区别的


2.shutdown 与close


即使how=2,实际上也没有完全闭关释放掉套接字及其资源。


shutdown对所有使用该套接字的所有者都有影响,一个所有者shutdown 了读或者写(总是会发送FIN给对方)则所有人都不可以读或者写。而

close只是减少引用计数,不会影响其他所有者对套接字的使用,直到引用计数减到0 才发送FIN



版权声明:本文为le119126原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。