0

我正在使用异步调用编写 TCP 客户端。如果应用程序启动时服务器处于活动状态,则它会连接并正常通话。但是,如果第一次连接失败,则随后对 connect() 的每次调用都会失败,并显示 WSAENOTCONN(10057),而不会产生任何网络流量(通过 Wireshark 进行检查)。

当前代码在收到错误时不会关闭套接字。TCP 状态图似乎不需要它。它只是等待 30 秒,然后再次尝试 connect()。

随后的 connect() 和随后的 read() 都返回 WSAENOTCONN 错误。

我需要关闭套接字并打开一个新的吗?如果是这样,哪些错误需要我关闭套接字,因为有很多不同的错误,其中一些我可能永远不会在测试台上看到。

您可以假设这是 MS Winsock2,尽管它实际上是 Interval Zero RTX 2009,在某些地方略有不同。

4

2 回答 2

1

我需要关闭套接字并打开一个新的吗?

是的。

如果是这样,哪些错误需要我关闭套接字,因为有很多不同的错误,其中一些我可能永远不会在测试台上看到。

几乎所有错误对连接都是致命的,应该导致您关闭套接字。EAGAIN/EWOULDBLOCK 是一个突出的例外,EINTR 也是如此,但我想不出任何其他的。

于 2017-01-05T17:02:29.877 回答
0

我需要关闭套接字并打开一个新的吗?

是的。

您应该在导致连接永久消失的所有错误情况下关闭套接字(例如,对等方已关闭连接)

于 2017-01-05T16:36:53.450 回答