首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何防止拔掉网络电缆时的windows错误10054

如何防止拔掉网络电缆时的windows错误10054
EN

Stack Overflow用户
提问于 2012-07-06 15:49:09
回答 2查看 1.4K关注 0票数 0

我有一个c++应用程序,它使用TCP将文件从一个处理器传输到另一个处理器。应用程序将运行在一个不可靠的网络上,因此当连接丢失和恢复时,传输必须继续进行。我使用ACE允许应用程序在Windows或Linux上运行。

目前,当我启动一个传输并中断两个处理器之间的网络连接时,如果我在20秒内重新连接它,传输就会恢复,一切都正常。如果连接没有在20秒内重新建立,我将得到Windows 10054,表示连接已被重置。此时,套接字消失了,一旦重新建立连接,传输就不会恢复。是否有一种方法可以覆盖该连接,以便控制连接何时超时?

编辑:这似乎是Windows问题。我尝试将一个文件从Linux发送到一个Windows机器。在传输过程中,我断开了网络电缆超过5分钟。当我重新连接它的时候,转接就在它停止并完成的地方。

EN

回答 2

Stack Overflow用户

发布于 2012-07-06 17:07:54

我认为这个话题应该说如何处理,而不是如何预防,对吗?您肯定希望获得此错误,因为(根据您的注释)此时文件传输将处于挂起状态,并且用户也会意识到这一点。为了挂起并通知用户,您需要获得一个错误。

无论如何,您提到的20秒可能是由于操作系统/路由器中的超时所致。这个数字可能会有很大的变化,你不应该以任何方式依赖它。您可以尝试更新路径上每一个框上的超时,但这通常是不可能的,也无法真正解决问题(您设置的超时时间总是比超时时间长)。

为了构建一个不受超时影响的解决方案,您需要在原始连接之上建立一个简单的协议,并允许从数据流的特定偏移量重新连接和恢复传输。您可以修改客户端以发送包含重传点详细信息的请求。

如果您的网络确实不可靠并且经常中断,您可以切换到UDP。一些包裹会到达,有些会丢失。您可以收集数据块并请求对尚未到达的部分数据进行重传。您可能需要花费更多的时间来设计正确的协议,但解决方案可能优于标准TCP。

票数 2
EN

Stack Overflow用户

发布于 2012-07-07 04:39:59

虽然您可能可以尝试一些套接字选项,但正确的解决方案可能如下:

将逻辑重新连接到您在TCP.之上实现的任何协议中。

您将始终有插座断开处理,即使您胶合网络电缆到端口。因此,您最好专注于让套接字定期尝试“重新连接”,然后让您的协议知道如何处理这种情况。(例如,尝试每N秒重新连接一次,可能每次等待更长的时间,直到某个最大超时)。然后,对于协议特定的更改,我将处理一个前提,即接收方应该从什么点开始传输数据。类似于web浏览器如何告诉http服务器如何恢复文件传输。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11365547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档