如何知道python中tcp connect的状态?

时间:2018-01-04 06:25:03

标签: python sockets tcp tcpclient

在python中,即使连接请求在服务器端的队列中,tcp connect也会返回成功。有没有办法知道客户端是接受发生还是在服务器队列中?

2 个答案:

答案 0 :(得分:0)

问题与Python无关,但是由底层套接字机制引起,该机制尽最大努力隐藏程序中的低级网络事件。我能想象的最好的方法是尝试更高级别的协议握手(发送一个hello字符串并设置一个超时来接收答案),但是下面的问题没有区别:

  • 连接在对等体上排队但仍未被接受
  • 已接受连接,但由于任何其他原因,服务器无法在分配的时间内处理它
  • (仅当超时非常短)机器(包括发件人)和网络上的拥塞增加了超时的延迟

我的建议只是你甚至不想担心这么低级别的细节。在连接被接受后,服务器端可能会出现问题,您将不得不处理可能的更高级协议错误,超时或连接丢失。只是说接受连接后的超时和接受连接的超时之间没有区别。

答案 1 :(得分:0)

如果connect返回并且没有错误,则TCP 3-Way Handshake已成功发生。

  1. 客户:connect发送SYN(和阻止)
  2. 服务器:(阻止accept)发送SYN,ACK
  3. 客户:connect发送ACK
  4. 3之后,connect在客户端向您发出控制权,accept还将控制权交还给服务器端的呼叫者。

    当然,如果服务器已满载,则无法保证唤醒accept表示请求的实际处理,但是连接已唤醒并返回且没有错误的事实是保证成功建立TCP连接。

    可以发送数据包。

    有关解释的详细信息,请参阅:

    前往The 3-way TCP handshake部分