Windows应用程序上的不规则套接字错误(10054) 我正在使用一个Windows(微软Visual C++ 2005)应用程序,它使用多个进程 在intranet中的不同主机上运行
进程之间使用TCP/IP进行通信。不同的流程可以在同一台计算机上运行 同一主机或不同主机上的通信(即通信可以在同一主机内进行 主机或不同主机之间) 我们目前有一个不规则出现的bug。沟通似乎有效 一段时间后,它停止工作。然后它又工作了一段时间 当通信不起作用时,我们会得到一个错误(显然是在一个过程中) 正在尝试发送数据)。该呼叫如下所示:Windows应用程序上的不规则套接字错误(10054) 我正在使用一个Windows(微软Visual C++ 2005)应用程序,它使用多个进程 在intranet中的不同主机上运行,windows,sockets,visual-c++,tcp-ip,Windows,Sockets,Visual C++,Tcp Ip,进程之间使用TCP/IP进行通信。不同的流程可以在同一台计算机上运行 同一主机或不同主机上的通信(即通信可以在同一主机内进行 主机或不同主机之间) 我们目前有一个不规则出现的bug。沟通似乎有效 一段时间后,它停止工作。然后它又工作了一段时间 当通信不起作用时,我们会得到一个错误(显然是在一个过程中) 正在尝试发送数据)。该呼叫如下所示: send(socket, (char *) data, (int) data_size, 0); 通过检查我们从中得到的错误代码 WSAGetLastErr
send(socket, (char *) data, (int) data_size, 0);
通过检查我们从中得到的错误代码
WSAGetLastError()
我们发现这是一个错误10054。以下是我在Microsoft文档中找到的内容
(见):
因此,据我所知,连接被接收过程中断。
在某些情况下,此错误(AFAIK)是正确的:一个进程已终止,并且
因此无法访问。在其他情况下,发送方和接收方都在运行
和日志记录活动,但由于上述错误(错误
在日志中报告)
我的问题
- 索林格选项是什么意思
- 什么是keep alive活动?它如何中断连接
- 如何避免此问题或从中恢复
感谢您的提示,确认唯一可能的解释是连接关闭错误。通过对问题的进一步分析,我们发现连接的服务器端进程已崩溃/已终止并已重新启动。因此,有一个新的服务器进程正在正确的端口上运行并侦听,但是客户端没有检测到这一点,仍然在尝试使用旧的连接。我们现在有了一种机制来检测这种情况并在客户端重置连接。该错误意味着连接已被客户端关闭
远程站点。因此,除了接受连接已断开之外,您无法对程序执行任何操作。最近几天我一直面临这个问题,并发现Adobe Acrobat Reader update是罪魁祸首。一旦从系统中完全卸载Adobe,一切都会恢复正常 是的,但远程站点是我们应用程序中的另一个进程。远程站点关闭连接时正在运行。我们正在试图理解为什么连接会无缘无故关闭。您设置了连接超时吗?我们有SO_SNDTIMEO,SO_RCVTIMEO==3秒。我刚刚检查了连接超时是否为5秒。这可能是问题所在。连接超时。尝试调试值0.HI Giargio,对于RDP连接(3389),我在c#中面临同样的问题。但连接中断的时间是50秒。
WSAECONNRESET
10054
Connection reset by peer.
An existing connection was forcibly closed by the remote host. This normally
results if the peer application on the remote host is suddenly stopped, the
host is rebooted, the host or remote network interface is disabled, or the
remote host uses a hard close (see setsockopt for more information on the
SO_LINGER option on the remote socket). This error may also result if a
connection was broken due to keep-alive activity detecting a failure while
one or more operations are in progress. Operations that were in progress
fail with WSAENETRESET. Subsequent operations fail with WSAECONNRESET.