RECV的超时总结

说明:针对recv返回值,阻塞情况下,当网络异常时,recv是返回个-1,还是阻塞不动,还是根据情况而定呢

一、 不论是阻塞还是非阻塞都是
<0:出错;
=0:连接关闭;
>0接收到数据大小
二、 Recv<0情况
1、特别:返回值 <0时并且(errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN)的情况下认为连接是正常的,继续接收。
2、只是阻塞模式下recv会阻塞着接收数据(非阻塞模式下如果没有数据会返回,不会阻塞着读,因此需要循环读取)。
阻塞情况下,阻塞接收,不会返回负数吗?
3、很多人说阻塞模式下read会阻塞着读,是否这样?我和同事试了不会阻塞,而是会返回一个负数。
4、阻塞模式下read返回值 < 0 && errno != EINTR && errno != EWOULDBLOCK && errno != EAGAIN时,连接异常需要关闭,read返回值 < 0 && (errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN)时表示没有数据,需要继续接收,如果返回值大于0表示接送到数据。

你可能感兴趣的:(RECV的超时总结)