首页 > 代码库 > Linux上TCP的shutdown/close
Linux上TCP的shutdown/close
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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。