0
在Linux或Windows socket編程Socket編程的send()的返回值
我知道讀返回一個值,表示 成功接收的字節數數。
該返回值可能會小於請求的長度。 (即,讀(SD,BUF,100)可能返回50,如果接收緩衝器 僅具有50個字節)
是有可能,
send(sd, buf, 100);
返回1〜99之間的值Δα 如果是,現在是什麼情況? 我想知道具體的例子情況。
預先感謝您
在Linux或Windows socket編程Socket編程的send()的返回值
我知道讀返回一個值,表示 成功接收的字節數數。
該返回值可能會小於請求的長度。 (即,讀(SD,BUF,100)可能返回50,如果接收緩衝器 僅具有50個字節)
是有可能,
send(sd, buf, 100);
返回1〜99之間的值Δα 如果是,現在是什麼情況? 我想知道具體的例子情況。
預先感謝您
見man
頁面,或者如果你正在談論的Winsock,爲官方指定的MSDN文檔。
在實踐,send()
阻塞模式發送的所有數據,無論文件說什麼,除非有一個錯誤,在這種情況下沒有被髮送。
在非阻塞模式下,它將發送任何適合套接字發送緩衝區的數據,並在大於0時返回該長度。如果套接字發送緩衝區已滿,則返回-1,其中errno = EWOULDBLOCK/EAGAIN
。
謝謝你,這正是我所設想的。你確認了,謝謝 – daehee
我還沒有測試過,但我想如果你通過阻塞I/O發送非常大的緩衝區(例如每個send()調用超過65KB),那麼發送( )發送部分數據,然後遇到錯誤(例如遠程對等關閉連接)。在這種情況下,我認爲send()行爲唯一有用的方法是返回發送的字節數,這將小於緩衝區大小。這在實踐中並不經常發生,因爲大多數程序不會在一次調用中發送太多數據。 –
@JeremyFriesner根據規格是可能的。實際上,它不會發生,也不是因爲「大多數程序不會嘗試發送太多數據」,而是因爲這是'send()'在所有內核中實現的方式。 – EJP