2008-09-19 120 views
1

如何發現有多少個字節已發送到TCP套接字但尚未放在線路上?TCP發送隊列深度

綜觀圖這裏:

我想知道的總類別2,3和4或總的3和4這是在C(++)和在兩個Windows和Linux。理想情況下,我可以使用一個ioctl,但似乎沒有。

+0

你想表達什麼?也許有人可以幫助解決當前的問題。 – terminus 2008-09-19 21:23:37

回答

0

一些Unix口味可能有API方式來做到這一點,但沒有辦法做到這一點,可以跨不同的變種進行移植。

3

在Linux下,請參閱tcp(7)的手冊頁。

看來,您可以通過IOCTL(襪子,SIOCINQ獲得的未發射的字節數...

其他屬性可能是從由TCP_INFO的getsockopt()調用還給結構的成員。

0

如果你想確定是否要添加數據:不要擔心,發送將阻塞,直到數據在隊列中。如果你不想阻塞它,你可以告訴它發送(2):

send(socket, buf, buflen, MSG_DONTWAIT); 

但這隻適用於Linux。

您還可以將插座設置爲非阻塞:

fcntl(socket, F_SETFD, O_NONBLOCK); 

這樣寫會返回一個錯誤(EAGAIN)如果數據不能被寫入流。