连接TCP套接字失败后的正确程序是什么?

时间:2017-01-05 16:13:19

标签: sockets networking tcp winsock2 rtx

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

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

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

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

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

2 个答案:

答案 0 :(得分:1)

  

我是否需要关闭套接字并打开一个新套接字?

  

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

几乎所有错误对连接都是致命的,并且应该导致您关闭套接字。 EAGAIN / EWOULDBLOCK是一个突出的例外,就像EINTR一样,但我不能随便想到任何其他人。

答案 1 :(得分:0)

  
    

我是否需要关闭套接字并打开一个新套接字?

  

你应该在所有错误条件下关闭套接字导致连接变好(比如说,对等关闭了连接)