加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

Windows应用程序上的不规则套接字错误(10054)

发布时间:2020-12-14 01:52:55 所属栏目:Windows 来源:网络整理
导读:我正在使用一个使用多个进程的 Windows(Microsoft Visual C 2005)应用程序 在Intranet中的不同主机上运行. 进程使用TCP / IP相互通信.不同的流程可以在 相同主机或不同主机(即通信可以在同一主机内) 主机或不同主机之间). 我们目前有一个不规则的错误.沟通似
我正在使用一个使用多个进程的 Windows(Microsoft Visual C 2005)应用程序
在Intranet中的不同主机上运行.

进程使用TCP / IP相互通信.不同的流程可以在
相同主机或不同主机(即通信可以在同一主机内)
主机或不同主机之间).

我们目前有一个不规则的错误.沟通似乎有效
一段时间后,它停止工作.然后它再次工作一段时间.

当通信不起作用时,我们会收到错误(显然是在进程中)
试图发送数据).电话看起来像这样:

send(socket,(char *) data,(int) data_size,0);

通过检查我们得到的错误代码

WSAGetLastError()

我们看到这是一个错误10054.这是我在Microsoft文档中找到的
(见here):

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.

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

我的问题.

> SO_LINGER选项意味着什么?
>什么是保持活动,它如何打破连接?
>如何避免这个问题或从中恢复?

关于最后一个问题.我们尝试的第一个解决方案(实际上,它是一个
解决方法)在发生错误时重新发送消息.不幸的是,
一段时间(几分钟)反复出现同样的错误.所以这不是
一个办法.

目前我们不了解我们是否有软件问题或配置
问题:也许我们应该检查一下windows注册表中的内容?

一个假设是操作系统耗尽短暂的端口(如果连接是
因为TcpTimedWaitDelay而没有释放端口,但是通过分析
这个问题我们认为应该有很多:问题甚至发生
如果在进程之间没有过于频繁地发送消息.但是,我们仍然没有
100%肯定我们可以排除这个:短暂的端口会以某种方式丢失(???)

另一个可能有用的细节是每个进程都会发送和接收
同时在单独的线程中:是否有任何共享数据结构
TCP / IP库可能已损坏?

同样非常奇怪的是问题不规律地发生:沟通有效
好几分钟,然后它几分钟不工作,然后再次工作.

感谢您提出任何意见和建议.

编辑

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

解决方法

该错误意味着连接已被关闭 远程站点.所以除了接受连接断开之外,你不能在你的程序上做任何事情.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读