免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6057 | 回复: 9
打印 上一主题 下一主题

socket的半关闭和close如何区分? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-01-18 21:41 |只看该作者 |倒序浏览
client端通过shutdown关闭写或者直接close时,server端的recv操作都会返回0;那server端如何区分这两种情况???
因为第一种情况下,server还要继续向client端发送回复数据呢。而如果是第二种情况,server端也可直接close。

论坛徽章:
0
2 [报告]
发表于 2011-01-18 22:03 |只看该作者
send,看返回值

个人觉得应用层协议定义时,没必要使用半关闭的特性,关闭的时候就双向都关好了

论坛徽章:
0
3 [报告]
发表于 2011-01-19 10:25 |只看该作者
客户端关闭了 服务端对应的socket 也会变成无效吧? 无效了留着还有啥用...

论坛徽章:
0
4 [报告]
发表于 2011-01-19 11:34 |只看该作者
如果client shutdown read,则server端就无法发送,但还可读。
反之依然。

论坛徽章:
0
5 [报告]
发表于 2011-01-19 17:26 |只看该作者
这个东西在 mongoose 里面有,看看它在关闭的时候怎么处理半连接的就明白了

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
6 [报告]
发表于 2011-01-21 00:41 |只看该作者
server根本不区分client 到底是shutdown还是close,因为read()返回都是0。它只管发送就是了,直到返回错误为止

论坛徽章:
0
7 [报告]
发表于 2011-01-21 09:12 |只看该作者
shutdown只会发送关闭连接,并不会真正的关闭fd,还需要close(fd)

论坛徽章:
0
8 [报告]
发表于 2011-01-21 11:03 |只看该作者
回复 6# chenzhanyiczy

只有像你说的这样处理了,不管recv收到0的情况,继续send。但看到好多程序里都是recv收到0后就相应close本方socket,呵呵

论坛徽章:
0
9 [报告]
发表于 2011-01-21 13:41 |只看该作者
一般情况下都是收到0字节数据时都会认为连接断开了。

论坛徽章:
0
10 [报告]
发表于 2011-01-30 14:55 |只看该作者
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP