send()什么时候会返回EWOULDBLOCK? [已关闭]

问题描述 投票:0回答:1

我现在正在使用一个应用程序,该应用程序主要使用带有

select()
超时的阻塞套接字,但通过 Write 函数,我使用带有
send()
的非阻塞套接字。我只需要知道,在什么(以及所有)情况下
send()
会返回
EWOULDBLOCK
/
EAGAIN

c sockets network-programming send nonblocking
1个回答
3
投票

send()
的 Linux 手册页说:

当消息无法放入套接字的发送缓冲区时, send() 通常会阻塞,除非套接字已放入 非阻塞 I/O 模式。在非阻塞模式下,它将失败并出现错误 在本例中为 EAGAIN 或 EWOULDBLOCK。 select(2) 调用可用于 确定何时可以发送更多数据。

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

© www.soinside.com 2019 - 2024. All rights reserved.