Sockets 非阻塞套接字上的发送操作何时完成?

Sockets 非阻塞套接字上的发送操作何时完成?,sockets,nonblocking,Sockets,Nonblocking,让我们假设sock是一个在非阻塞模式下打开的unix套接字,具有以下功能 void send_int(int sock, int flags) { int x = 0xff; send(sock, &x, sizeof(int), flags); } 这个代码“正确”吗?我不确定在发送返回之前是否将缓冲区(x)复制到某个发送缓冲区,或者有可能send和send\u int返回得太早,然后使用不存在的缓冲区,因为它仅在堆栈上…否在非阻塞模式下完成发送操作之前,无需保留用户

让我们假设
sock
是一个在非阻塞模式下打开的unix套接字,具有以下功能

void send_int(int sock, int flags) {
    int x = 0xff;
    send(sock, &x, sizeof(int), flags);
}

这个代码“正确”吗?我不确定在发送返回之前是否将缓冲区(
x
)复制到某个发送缓冲区,或者有可能
send
send\u int
返回得太早,然后使用不存在的缓冲区,因为它仅在堆栈上…

否在非阻塞模式下完成发送操作之前,无需保留用户发送缓冲区。所以你的代码很好

在内部,发送缓冲区被复制到套接字缓冲区(SKB)发送队列,并传递到内核空间

参考资料:

  • 政府没有提到这种需要
  • 戴夫·米勒酒店