免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234
最近访问板块 发新帖
楼主: seufy88

[Linux] socket中close和shutdown的区别 [复制链接]

论坛徽章:
1
双子座
日期:2013-11-06 17:18:01
发表于 2014-04-20 21:21 |显示全部楼层
回复 7# timespace

你好,再追问一下.
一般调用CLOSE后
"1. close后,默认情况与使用l_onoff=0效果一致,本方继续接收数据并ACK,但会丢弃这些数据,直到对方FIN过来,完成连接终止过程;"
你在这句中提到,本方会继续接收对方来的数据并ACK,

这个是否和SIGPIPE有出入?因为SIGPIPE是对已经收到RST的SOCKET,
什么情况下会收到RST,站在方面的角度,就是它向本方一个已经CLOSE的SOCKET继续发送数据,本方y"应该"发送RST给对方,对方二次调用WRITE时,就会检测到SIGPIPE.

但是根据描述"1"来看,对方继续发送数据到本方,本方并不会发送RST,而是ACK.

请问这样说来,是否有出入?

而你其他的描述("2","3")中也没有提到和这一情况相关的.

TKS
   

论坛徽章:
11
技术图书徽章
日期:2014-03-01 14:44:34天蝎座
日期:2014-05-21 22:11:59金牛座
日期:2014-05-30 17:06:14
发表于 2014-04-21 10:05 |显示全部楼层
回复 31# seufy88
三个办法从易到难:
1. 看参考书,上面推荐过。
2. 写demo,tcpdump抓包分析。
3. 研究内核代码。
TCP/IP是实践者为实践所写的网络协议,如果想做凭空推理或想象,请移步OSI模型,谢谢。


   

论坛徽章:
1
双子座
日期:2013-11-06 17:18:01
发表于 2014-04-21 12:05 |显示全部楼层
回复 32# timespace


    我自问自答一下吧。
    SOCKET状态为CLOSE时,收到DATA才会发送RST
    如果调用close()后,该socket并不处于CLOSE状态,而是FIN_WATI1/2等,所以继续收到DATA后,并不会发送RST,而是如你所说:"1. close后,默认情况与使用l_onoff=0效果一致,本方继续接收数据并ACK,但会丢弃这些数据,直到对方FIN过来,完成连接终止过程;"


您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP