Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows应用程序上的不规则套接字错误(10054) 我正在使用一个Windows(微软Visual C++ 2005)应用程序,它使用多个进程 在intranet中的不同主机上运行_Windows_Sockets_Visual C++_Tcp Ip - Fatal编程技术网

Windows应用程序上的不规则套接字错误(10054) 我正在使用一个Windows(微软Visual C++ 2005)应用程序,它使用多个进程 在intranet中的不同主机上运行

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

进程之间使用TCP/IP进行通信。不同的流程可以在同一台计算机上运行 同一主机或不同主机上的通信(即通信可以在同一主机内进行 主机或不同主机之间)

我们目前有一个不规则出现的bug。沟通似乎有效 一段时间后,它停止工作。然后它又工作了一段时间

当通信不起作用时,我们会得到一个错误(显然是在一个过程中) 正在尝试发送数据)。该呼叫如下所示:

send(socket, (char *) data, (int) data_size, 0);
通过检查我们从中得到的错误代码

WSAGetLastError()
我们发现这是一个错误10054。以下是我在Microsoft文档中找到的内容 (见):

因此,据我所知,连接被接收过程中断。 在某些情况下,此错误(AFAIK)是正确的:一个进程已终止,并且 因此无法访问。在其他情况下,发送方和接收方都在运行 和日志记录活动,但由于上述错误(错误 在日志中报告)

我的问题

  • 索林格选项是什么意思
  • 什么是keep alive活动?它如何中断连接
  • 如何避免此问题或从中恢复
关于最后一个问题。我们尝试的第一个解决方案(实际上,这是一个相当复杂的问题) 解决方法)在发生错误时正在重新发送消息。不幸的是 同样的错误在一段时间内(几分钟内)反复出现。所以这不是 解决办法

目前,我们不知道是否存在软件问题或配置问题 问题:也许我们应该在windows注册表中检查一些东西

一个假设是操作系统的临时端口用完了(以防连接中断) 已关闭,但由于TcpTimedWaitDelay(延迟),端口未释放,而是通过分析 在这个问题上,我们认为应该有很多这样的问题:问题甚至会发生 如果消息在进程之间发送得不太频繁。然而,我们仍然不是 100%确定我们可以排除这一点:临时端口是否会以某种方式丢失(?)

另一个可能有用的细节是发送和接收发生在每个进程中 在单独的线程中并发:在 可能损坏的TCP/IP库

另一个非常奇怪的是,这个问题不规则地出现了:通信是有效的 好几分钟,然后几分钟不工作,然后再工作

谢谢你的任何想法和建议

编辑


感谢您的提示,确认唯一可能的解释是连接关闭错误。通过对问题的进一步分析,我们发现连接的服务器端进程已崩溃/已终止并已重新启动。因此,有一个新的服务器进程正在正确的端口上运行并侦听,但是客户端没有检测到这一点,仍然在尝试使用旧的连接。我们现在有了一种机制来检测这种情况并在客户端重置连接。

该错误意味着连接已被客户端关闭
远程站点。因此,除了接受连接已断开之外,您无法对程序执行任何操作。

最近几天我一直面临这个问题,并发现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.