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