Linux上异步socket发送

Asynchronous socket send on Linux

本文关键字:发送 socket 异步 Linux      更新时间:2023-10-16

当send在异步套接字上返回EAGAIN时,这是否意味着:当前调用刚刚成功排队,还是因为系统仍在处理先前的发送而没有做任何事情?

提前感谢。

From man 2 send:

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

所以我认为EAGAIN的意思是:be careful, the message did not fit into send buffer, this call would be blocked in normal (blocking) mode. Use select(2) to determine whether you can send more data.

注:实际上,看起来调用失败了,什么也没做。

什么也没做。

如果执行了操作,返回值告诉您发送了多少个字符。当您得到返回值-1和errno=EAGAIN时,表示没有发送任何内容。