当前位置: 技术问答>linux和unix
read一个socket, 发现read到的长度是0, 是否一定代表对方调用了close关闭了socket?
来源: 互联网 发布时间:2015-12-19
本文导语: read一个socket, 发现read到的长度是0, 是否一定代表对方调用了close关闭了socket? 如果不是, 在程序中怎么判断是对方关闭了socket还是其它因素导致read到了0长度?? | 他如果用的是UDP,那可能返回...
read一个socket, 发现read到的长度是0, 是否一定代表对方调用了close关闭了socket?
如果不是, 在程序中怎么判断是对方关闭了socket还是其它因素导致read到了0长度??
如果不是, 在程序中怎么判断是对方关闭了socket还是其它因素导致read到了0长度??
|
他如果用的是UDP,那可能返回为0表示是一个空的数据报,所以不能根据返回0来判断是否出错。
|
UP
UDP和TCP处理是有区别的
TCP返回0至少可以肯定对方关闭了写方向的socket
UDP返回0是正常情况,不能据此判断对方关闭socket否;
返回0时肯定时出错了,此时需要根据errno和socket属性进行处理
UDP和TCP处理是有区别的
TCP返回0至少可以肯定对方关闭了写方向的socket
UDP返回0是正常情况,不能据此判断对方关闭socket否;
返回0时肯定时出错了,此时需要根据errno和socket属性进行处理
|
在TCP模式下有两种情况,一种是收到了FIN的原语,另一种则是收到了RST原语。对应的操作可以参看下TCP/IP卷1,2,3
对于UDP,很有可能UDP的包错了。
对于UDP,很有可能UDP的包错了。
|
read到0是关闭了,否则大于0,出错时小于0
|
read到0是关闭了,否则大于0,出错时小于0
|
read 会不会被设置成不阻塞的? 没有读到数据就返回了?我是菜鸟,请教大家
|
tcp的程序应该是根据返回为0判断的
对于 read(fd, buff, 0) 会返回0
或许它被调用时直接返回了,根本没去读取文件或socket,也谈不上读到socket了.
菜鸟回答,望大家指正:P
对于 read(fd, buff, 0) 会返回0
或许它被调用时直接返回了,根本没去读取文件或socket,也谈不上读到socket了.
菜鸟回答,望大家指正:P
|
linux man page 说
if count is zero, read() returns zero and has no other results.
即它直接返回.不做其他动作
if count is zero, read() returns zero and has no other results.
即它直接返回.不做其他动作