假设sock
是在非阻塞模式下打开的unix套接字并且跟随函数
void send_int(int sock, int flags) {
int x = 0xff;
send(sock, &x, sizeof(int), flags);
}
这段代码“是否正确”?我不确定缓冲区(x
)是否在发送返回之前被复制到某个发送缓冲区,或者send
和send_int
有可能过早返回然后不存在使用缓冲区,因为它只在堆栈上...
答案 0 :(得分:1)
在非阻塞模式下完成发送操作之前,不需要保留用户发送缓冲区。所以你的代码很好。
在内部,发送缓冲区被复制到套接字缓冲区(SKB)发送队列并复制到内核空间。
参考文献: