2012-09-18 57 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,则语义意图是丢失任何正在运行的数据。服务器通常没有这样的业务。问题在于此。除了可能使用更大的套接字接收缓冲区来更改窗口并更快地读取外,您无法在客户端执行任何操作。

相关问题