从套接字读取时,如果返回 EWOULDBLOCK ..是否可能只读取部分数据?还是返回 EWOULDBLOCK 时读取的数据为 0 ?
问问题
2460 次
2 回答
4
从套接字读取时,如果返回 EWOULDBLOCK
EWOULDBLOCK
当没有数据可用而不阻塞时返回。
..是否可能只读取部分数据?
不。
还是返回 EWOULDBLOCK 时读取的数据为 0 ?
EWOULDBLOCK
当没有数据可用而不阻塞时返回。
于 2013-05-15T10:31:15.250 回答
-1
从 O_NONBLOCK 套接字读取时,如果没有可用数据, recv将返回 -1 并设置EWOULDBLOCK或EAGAIN 。
是否可能只读取部分数据?
是:调用recv将返回当前可用的尽可能多的信息 - 最多为请求的数量。
您还应该查看 recv 的标志,特别是MSG_WAITALL和MSG_PEEK。
如果 recv 返回 0,则表示套接字已在对等端正确关闭,并且没有待处理的数据。
于 2013-05-15T14:14:00.810 回答