1

从套接字读取时,如果返回 EWOULDBLOCK ..是否可能只读取部分数据?还是返回 EWOULDBLOCK 时读取的数据为 0 ?

4

2 回答 2

4

从套接字读取时,如果返回 EWOULDBLOCK

EWOULDBLOCK当没有数据可用而不阻塞时返回。

..是否可能只读取部分数据?

不。

还是返回 EWOULDBLOCK 时读取的数据为 0 ?

EWOULDBLOCK当没有数据可用而不阻塞时返回。

于 2013-05-15T10:31:15.250 回答
-1

从 O_NONBLOCK 套接字读取时,如果没有可用数据, recv将返回 -1 并设置EWOULDBLOCKEAGAIN 。

是否可能只读取部分数据?

是:调用recv将返回当前可用的尽可能多的信息 - 最多为请求的数量。

您还应该查看 recv 的标志,特别是MSG_WAITALLMSG_PEEK

如果 recv 返回 0,则表示套接字已在对等端正确关闭,并且没有待处理的数据。

于 2013-05-15T14:14:00.810 回答