在非阻塞套接字上完成发送操作?

时间:2012-09-24 07:21:43

标签: sockets nonblocking

假设sock是在非阻塞模式下打开的unix套接字并且跟随函数

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

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

1 个答案:

答案 0 :(得分:1)

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

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

参考文献: