在python中,即使连接请求在服务器端的队列中,tcp connect也会返回成功。有没有办法知道客户端是接受发生还是在服务器队列中?
答案 0 :(得分:0)
问题与Python无关,但是由底层套接字机制引起,该机制尽最大努力隐藏程序中的低级网络事件。我能想象的最好的方法是尝试更高级别的协议握手(发送一个hello字符串并设置一个超时来接收答案),但是下面的问题没有区别:
我的建议只是你甚至不想担心这么低级别的细节。在连接被接受后,服务器端可能会出现问题,您将不得不处理可能的更高级协议错误,超时或连接丢失。只是说接受连接后的超时和接受连接的超时之间没有区别。
答案 1 :(得分:0)
如果connect
返回并且没有错误,则TCP 3-Way Handshake已成功发生。
connect
发送SYN
(和阻止)accept
)发送SYN,ACK
connect
发送ACK
在3
之后,connect
在客户端向您发出控制权,accept
还将控制权交还给服务器端的呼叫者。
当然,如果服务器已满载,则无法保证唤醒accept
表示请求的实际处理,但是连接已唤醒并返回且没有错误的事实是保证成功建立TCP连接。
可以发送数据包。
有关解释的详细信息,请参阅:
前往The 3-way TCP handshake
部分