收到部分数据时是否可能返回EWOULDBLOCK

时间:2013-05-15 09:35:38

标签: sockets nonblocking

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

2 个答案:

答案 0 :(得分:4)

  

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

如果没有数据可用且没有阻止,则返回

EWOULDBLOCK

  

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

没有

  

或者当返回EWOULDBLOCK时,数据读取是否为0?

如果没有数据可用且没有阻止,则返回

EWOULDBLOCK

答案 1 :(得分:-1)

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

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

是:调用 recv 将返回尽可能多的当前可用信息 - 直至请求的金额。

你还应该看看recv的标志,特别是 MSG_WAITALL MSG_PEEK

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