首页 > 系统服务 > 详细

Linux上TCP的shutdown/close

时间:2017-02-03 16:51:40      阅读:206      评论:0      收藏:0      [点我收藏+]
Linux上TCP的shutdown/close
 Linux的版本是kernel-2.6.21:
 1.只要TCP栈的读缓冲里还有未读取(read)数据,则调用close时会直接向对端发送RST.
 2.shutdown与socket描述符没有关系,即使调用shutdown(fd, SHUT_RDWR)也不会关闭fd,最终还需close(fd).
 3.可以认为shutdown(fd, SHUT_RD)是空操作,因为shutdown后还可以继续从该socket读取数据,这点也许还需要进一步证实.
 4.在已发送FIN包后write该socket描述符会引发EPIPE/SIGPIPE.
 5.当有多个socket描述符指向同一socket对象时,调用close时首先会递减该对象的引用计数,计数为0时才会发送FIN包结束TCP连接.shutdown不同,只要以SHUT_WR/SHUT_RDWR方式调用即发送FIN包.
 6.SO_LINGER与close,当SO_LINGER选项开启但超时值为0时,调用close直接发送RST(这样可以避免进入TIME_WAIT状态,但破坏了TCP协议的正常工作方式),SO_LINGER对shutdown无影响.
 7.TCP连接上出现RST与随后可能的TIME_WAIT状态没有直接关系,主动发FIN包方必然会进入TIME_WAIT状态,除非不发送FIN而直接以发送RST结束连接.

Linux上TCP的shutdown/close

原文:http://www.cnblogs.com/abelian/p/6362909.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!