2012-09-24 44 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