Chinaunix

标题: socket的半关闭和close如何区分? [打印本页]

作者: chenaiming2009    时间: 2011-01-18 21:41
标题: socket的半关闭和close如何区分?
client端通过shutdown关闭写或者直接close时,server端的recv操作都会返回0;那server端如何区分这两种情况???
因为第一种情况下,server还要继续向client端发送回复数据呢。而如果是第二种情况,server端也可直接close。
作者: drangon    时间: 2011-01-18 22:03
send,看返回值

个人觉得应用层协议定义时,没必要使用半关闭的特性,关闭的时候就双向都关好了
作者: wb112200    时间: 2011-01-19 10:25
客户端关闭了 服务端对应的socket 也会变成无效吧? 无效了留着还有啥用...
作者: rain_fish    时间: 2011-01-19 11:34
如果client shutdown read,则server端就无法发送,但还可读。
反之依然。
作者: litguy    时间: 2011-01-19 17:26
这个东西在 mongoose 里面有,看看它在关闭的时候怎么处理半连接的就明白了
作者: chenzhanyiczy    时间: 2011-01-21 00:41
server根本不区分client 到底是shutdown还是close,因为read()返回都是0。它只管发送就是了,直到返回错误为止
作者: rain_fish    时间: 2011-01-21 09:12
shutdown只会发送关闭连接,并不会真正的关闭fd,还需要close(fd)
作者: chenaiming2009    时间: 2011-01-21 11:03
回复 6# chenzhanyiczy

只有像你说的这样处理了,不管recv收到0的情况,继续send。但看到好多程序里都是recv收到0后就相应close本方socket,呵呵
作者: rain_fish    时间: 2011-01-21 13:41
一般情况下都是收到0字节数据时都会认为连接断开了。
作者: johntsu    时间: 2011-01-30 14:55





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2