0

假设这sock是一个以非阻塞模式打开的 unix 套接字和以下函数

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

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

4

1 回答 1

1

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

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

参考:

于 2012-09-24T09:38:15.957 回答