2013-02-05 28 views
0

在Linux或Windows socket編程Socket編程的send()的返回值

我知道讀返回一個值,表示 成功接收的字節數數。

該返回值可能會小於請求的長度。 (即,讀(SD,BUF,100)可能返回50,如果接收緩衝器 僅具有50個字節)

是有可能,

send(sd, buf, 100); 

返回1〜99之間的值Δα 如果是,現在是什麼情況? 我想知道具體的例子情況。

預先感謝您

回答

2

man頁面,或者如果你正在談論的Winsock,爲官方指定的MSDN文檔。

實踐,send()阻塞模式發送的所有數據,無論文件說什麼,除非有一個錯誤,在這種情況下沒有被髮送。

在非阻塞模式下,它將發送任何適合套接字發送緩衝區的數據,並在大於0時返回該長度。如果套接字發送緩衝區已滿,則返回-1,其中errno = EWOULDBLOCK/EAGAIN

+0

謝謝你,這正是我所設想的。你確認了,謝謝 – daehee

+0

我還沒有測試過,但我想如果你通過阻塞I/O發送非常大的緩衝區(例如每個send()調用超過65KB),那麼發送( )發送部分數據,然後遇到錯誤(例如遠程對等關閉連接)。在這種情況下,我認爲send()行爲唯一有用的方法是返回發送的字節數,這將小於緩衝區大小。這在實踐中並不經常發生,因爲大多數程序不會在一次調用中發送太多數據。 –

+1

@JeremyFriesner根據規格是可能的。實際上,它不會發生,也不是因爲「大多數程序不會嘗試發送太多數據」,而是因爲這是'send()'在所有內核中實現的方式。 – EJP