我正在使用一个现在主要使用带有select()超时的阻塞套接字的应用程序,但是使用Write函数,我使用带有send()的非阻塞套接字。我只需要知道,在什么(和所有)情况下send()会返回EWOULDBLOCK / EAGAIN?
答案 0 :(得分:2)
send()
的Linux手册页说:
当消息不适合套接字的发送缓冲区时, send()通常会阻塞,除非插入了套接字 非阻塞I / O模式。在非阻塞模式下,它会因错误而失败 在这种情况下,EAGAIN或EWOULDBLOCK。 select(2)调用可用于 确定何时可以发送更多数据。
和
返回值 EAGAIN或EWOULDBLOCK :套接字标记为非阻塞且 请求的操作会阻止。 POSIX.1-2001允许任何一个错误 为这种情况返回,并不需要这些常量 具有相同的值,因此便携式应用程序应检查两者 可能性。