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