2012-09-18 109 views
1

在嘗試讀取發送到定義端口上套接字的數據時,我在開源應用程序(quickfix 1.13.3)中遇到問題。在接收到RST和套接字關閉後讀取數據

當服務器發送數據並在其後關閉套接字時,會發生此問題。 然後我的代碼無法讀取上次發送的數據,並引發10054錯誤。 請注意,如果服務器未關閉套接字,我能夠正常接收數據。

這是我用來從服務器接收數據的代碼,等待你的幫助;

int size = recv(m_socket, m_buffer, sizeof(m_buffer), 0); 

需要注意的是,如果我使用的TcpClient接收它工作得很好的數據,但是這將導致創建另一個的quickfix應用程序,這意味着幾個月的艱苦工作迷路多月來創建一個類似的quickfix的應用程序。

+0

如果存在要接收的數據,那麼當連接關閉時,您不應該一次收到錯誤。 –

+0

另外,如果你得到錯誤'10054'('WSAECONNRESET'),那麼這是一個跡象表明另一個沒有以很好的方式關閉套接字。檢查服務器端的日誌以查看發生了什麼。 –

+0

我確定有數據可以讀取,正如我所說我能夠使用tcpclient讀取它,並且是服務器沒有以很好的方式關閉套接字,服務器發送RST並關閉套接字 – user1680066

回答

0

如果服務器導致發送RST,則語義意圖是丟失任何正在運行的數據。服務器通常沒有這樣的業務。問題在於此。除了可能使用更大的套接字接收緩衝區來更改窗口並更快地讀取外,您無法在客戶端執行任何操作。

相關問題