2017-05-29 37 views
0

標誌MSG_WAITALL可用於recv,它要求recv阻塞,直到滿足完整請求。這意味着recv將不會返回,直到收到儘可能多的數據(由參數len指定),除非發生錯誤或連接已關閉。爲什麼沒有像MSG_WAITALL這樣的標誌發送?

爲什麼這樣的標誌不適用於send?我認爲這將是非常有用的發送(send不會返回,直到主叫方想發送的所有字節已交給TCP發送緩衝區)

+0

什麼,等到對方收到它? –

回答

2

這將是多餘的。您可以始終將套接字置於阻塞模式(如果尚未阻塞),在這種情況下,send()會阻塞,直到傳輸完所有數據。

+1

通過*轉移*,您的意思是*排隊到內核的發送隊列*。 – selbie

+0

阻塞套接字是否真的會發送所有數據? 'man'表示'send'返回發送的字節數量,這意味着其他事情可能發生。另外,在這種情況下,還不清楚函數'sendall'的目的是Ruby和Python等語言添加到它們的套接字模塊中。 – Vovanrock2002

+0

@ Vovanrock2002數據將從緩衝區傳輸到其他地方。沒有保證(實際上也不可能)接收方將實際「接收」您的數據而不是將其丟棄。 –

相關問題