標誌MSG_WAITALL
可用於recv
,它要求recv
阻塞,直到滿足完整請求。這意味着recv
將不會返回,直到收到儘可能多的數據(由參數len
指定),除非發生錯誤或連接已關閉。爲什麼沒有像MSG_WAITALL這樣的標誌發送?
爲什麼這樣的標誌不適用於send
?我認爲這將是非常有用的發送(send
不會返回,直到主叫方想發送的所有字節已交給TCP發送緩衝區)
標誌MSG_WAITALL
可用於recv
,它要求recv
阻塞,直到滿足完整請求。這意味着recv
將不會返回,直到收到儘可能多的數據(由參數len
指定),除非發生錯誤或連接已關閉。爲什麼沒有像MSG_WAITALL這樣的標誌發送?
爲什麼這樣的標誌不適用於send
?我認爲這將是非常有用的發送(send
不會返回,直到主叫方想發送的所有字節已交給TCP發送緩衝區)
這將是多餘的。您可以始終將套接字置於阻塞模式(如果尚未阻塞),在這種情況下,send()
會阻塞,直到傳輸完所有數據。
通過*轉移*,您的意思是*排隊到內核的發送隊列*。 – selbie
阻塞套接字是否真的會發送所有數據? 'man'表示'send'返回發送的字節數量,這意味着其他事情可能發生。另外,在這種情況下,還不清楚函數'sendall'的目的是Ruby和Python等語言添加到它們的套接字模塊中。 – Vovanrock2002
@ Vovanrock2002數據將從緩衝區傳輸到其他地方。沒有保證(實際上也不可能)接收方將實際「接收」您的數據而不是將其丟棄。 –
什麼,等到對方收到它? –