send()什么时候返回EWOULDBLOCK?

时间:2016-03-21 20:03:12

标签: c sockets networking send nonblocking

我正在使用一个现在主要使用带有select()超时的阻塞套接字的应用程序,但是使用Write函数,我使用带有send()的非阻塞套接字。我只需要知道,在什么(和所有)情况下send()会返回EWOULDBLOCK / EAGAIN?

1 个答案:

答案 0 :(得分:2)

send()的Linux手册页说:

  

当消息不适合套接字的发送缓冲区时,   send()通常会阻塞,除非插入了套接字   非阻塞I / O模式。在非阻塞模式下,它会因错误而失败   在这种情况下,EAGAIN或EWOULDBLOCK。 select(2)调用可用于   确定何时可以发送更多数据。

  

返回值 EAGAIN或EWOULDBLOCK :套接字标记为非阻塞且   请求的操作会阻止。 POSIX.1-2001允许任何一个错误   为这种情况返回,并不需要这些常量   具有相同的值,因此便携式应用程序应检查两者   可能性。