Networking 如何修复WSAECONNABORTED错误?

Networking 如何修复WSAECONNABORTED错误?,networking,tcp,Networking,Tcp,我有一个C/S应用程序。客户端通常使用TCP协议向服务器发送大量数据。它在局域网环境(10MB/s)下运行良好,但在我将其迁移到广域网环境(200KB/s)时会发生网络错误 在跟踪bug时,我发现客户端中的send()首先返回-1和WSAGetLastError()返回WSAECONNABORTED;几秒钟后,服务器中的recv()也返回-1,并且errno是ECONNRESET 通过查阅文档,我对WSAECONNABORTED和ECONNRESET有了基本的了解。 我认为前者是由坏网络造成的:

我有一个C/S应用程序。客户端通常使用TCP协议向服务器发送大量数据。它在局域网环境(10MB/s)下运行良好,但在我将其迁移到广域网环境(200KB/s)时会发生网络错误

在跟踪bug时,我发现客户端中的
send()
首先返回-1和
WSAGetLastError()
返回
WSAECONNABORTED
;几秒钟后,服务器中的
recv()
也返回-1,并且
errno
ECONNRESET

通过查阅文档,我对
WSAECONNABORTED
ECONNRESET
有了基本的了解。 我认为前者是由坏网络造成的:TCP在多次重传失败后关闭套接字。后者是客户端意外关闭操作的结果

我想知道如何处理这种错误。立即重新连接?或者任何插座选项都有帮助?

你说得对

前者是由于网络问题造成的。你所能做的就是用一个新的插座再试一次


后者是应用程序协议错误。您正在发送,而对等方已关闭。这是一个应用程序错误。解决方法是修复错误。

与大多数错误代码一样,WSAECONNABORTED有许多原因。我发现最常见的情况是,当我试图使用在别处被shutdown()或closesocket()修改的套接字时。我会检查您处理FD_CLOSE事件的时间安排。完全有可能在FD_读取后很快接收到FD_关闭,以致在关闭套接字之前读取函数无法完成。问题总是在于您的软件处理网络事件的方式,或者更准确地说是处理这些事件的顺序。希望这有帮助o) @curzonnasau应用程序中的其他地方关闭或关闭都不可能导致此问题,并且根据TCP的性质,在套接字关闭之前读取功能不可能失败。“解决方法是修复错误”+1