2012-09-24 46 views
0

让我们假设sock是一个Unix套接字在非阻塞模式打开,下面的函数当发送操作在非阻塞套接字完成了吗?

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

这段代码“正确”?我不知道缓冲区(x)是否被复制到一些发送缓冲区之前发送的回报,或者存在着sendsend_int回报为时尚早,然后不存在的缓冲区使用,因为它只是在栈上的机会...

回答

1

不,它是没有必要保留,直到发送操作在非阻塞模式完成用户发送缓冲区。所以你的代码很好。

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

参考文献:

+0

谢谢,我也不知道,如果我理解正确的手册页。 – Honza