當在Linux上使用阻塞套接字時,是否有任何理由讓send()
返回小於請求的值,其他比中斷但部分成功的系統調用還要多?什麼時候send()返回小於length參數?
我知道,這可能是定義非常實施,而且它很可能是非常危險的依賴於這種行爲,即使沒有安裝任何信號處理(因此原因中斷的系統調用)。我可能會繞過發送電話直到完成;但是,如果有關於此事的官方言論,我將能夠避免這種情況。
Why is it assumed that send may return with less than requested data transmitted on a blocking socket?是問同樣的問題,與不確定的結果:中斷的系統調用被提及作爲短暫返回計數的例子,但目前還不清楚完整的TCP發送緩衝區是否會導致部分發送或send()
只會阻塞,直到緩衝區中有足夠的空間。
FWIW,該手冊頁'發送()'在我的Linux機器說'當消息不適合套接字的發送緩衝區,發送()正常塊,除非插座被放置在非阻塞I/O模式。在非阻塞模式下,它會失敗,錯誤EAGAIN 或EWOULDBLOCK在這個case.'它似乎沒有記錄功能的恢復比'len'參數以外的任何(或'-1'上的錯誤)。 – 2012-01-17 19:55:00
Linux手冊頁非常模糊。在BSD系統上檢查頁面會更好。 RETURN VALUES部分記錄了它只返回了發送的字符數,但不保證它與請求的數字相同。 – 2012-01-25 17:01:01