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)发送队列,并传递到内核空间
参考资料:
- 政府没有提到这种需要
- 戴夫·米勒酒店