2015-09-19 25 views
2

我的程序類似於HTTP代理,它等待接口上的消息並將它們轉發到另一個接口。該應用程序僅使用IOCP,客戶端和服務器端。有時,客戶端比服務器慢(比例爲10或100),而服務器無法緩衝太多的數據。 如何暫停建立的TCP連接,然後恢復它而不丟失任何消息?我試圖推遲一個新的recv IOCP事件,但有些消息丟失。 C++ /的Windows 7+如何暫停IOCP TCP套接字服務器?

+0

協商較小的滑動窗口大小,等於您願意在單個連接上緩衝的數據量。 –

回答

1

我試圖延緩新的recv IOCP事件

這其實應該做的伎倆一職。然後,服務器端TCP連接的接收緩衝區將填充到您的套接字上設置的接收緩衝區大小,此時套接字將推回到該套接字的發送端,通過標準方式TCP flow control - 可以簡單地停止發送更多直到接收器信號已經處理了更多的消息。

現在它取決於發送端在斷開連接之前要等待多久(超時)。

「一些消息丟失」

,可以用TCP,如果你斷開連接,只發生這發送方和接收方將採取的通知。所以數據不會簡單地丟失。它依賴於TCP上的網絡協議,通過發送者應用程序是否可以知道接收應用程序(在這種情況下爲您的代理)成功處理了多少消息。

+0

謝謝,帖子被延遲時TCP棧的行爲對我而言並不清楚。 – Olivier