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

问题描述 投票:1回答:2

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

python sockets tcp tcpclient
2个回答
0
投票

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

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

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


0
投票

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

  1. 客户:connect发送SYN(和块)
  2. 服务器:(在accept上阻塞)发送一个SYN,ACK
  3. 客户:connect发送ACK

3之后,connectgives在客户端控制回你,accept也将控制权交还给服务器端的呼叫者。

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

可以发送数据包。

有关详细说明,请参阅示例:

然后前往The 3-way TCP handshake

© www.soinside.com 2019 - 2024. All rights reserved.