日期:2014-05-16  浏览次数:21174 次

为什么读套接字(recv)的时候被信号中断,但是返回值为0
谁能帮忙看一下,弄了一天了,就是查不出来哪里出了问题!
程序逻辑:服务器端与客户端交互的程序,服务器端接受客户端的不同的请求,对应做出不同的处理
程序问题:
  服务器端:recv 在阻塞等待接受客户端的请求,如果10秒钟收不到客户端的请求则产生一个闹钟信号,为什么每次产生信号的时候recv的返回值为0,如果有信号中断recv函数的时候返回值应该是-1啊,我查看了errno的值,也是0!于是我晕了!求助哪位高人帮忙指点一下!,谢了

------解决方案--------------------
#man recv


RETURN VALUE
These calls return the number of bytes received, or -1 if an error occurred. The return value will be 0 when the peer
has performed an orderly shutdown.
------解决方案--------------------
Scoket是双全工的,即某一时刻既可以发送数据,也可以接收数据。
如果对方关闭了socket,此时你接收数据,肯定会返回0。
------解决方案--------------------
对端关闭了, 所以你的read将始终返回0, 无论你读几遍。