Python socket.connect有时会挂起

时间:2014-02-20 22:56:09

标签: python sockets network-programming

我正在学习在python中使用套接字,并且发生了一些奇怪的事情。

我在try块中调用socket.connect,通常它会完成并且我有一个新的套接字连接,或者它引发了异常。然而,有时它只是挂起。

我不明白为什么有时它会返回(即使没有连接!),有时它只是挂起。是什么让它挂起?

我正在使用阻塞套接字(非阻塞似乎不适用于连接...),所以我添加了一个超时,但我更喜欢连接完成而不需要超时。

也许,当它没有挂起时,会收到一个响应,告诉它请求的ip /端口不可用,当它挂起时,另一端没有响应?

我在OSX10.8上使用python2.7

2 个答案:

答案 0 :(得分:2)

connect()挂起时,通常是因为您连接到防火墙后面的地址,而防火墙只丢弃没有响应的数据包。它一直试图在Linux上连接大约2分钟,然后超时并返回错误。

答案 1 :(得分:1)

防火墙可能是这种意外响应背后的解释。而不是假设远程防火墙接受连接,使用超时是最佳选择。因为,在网络中建立连接是一个快速的过程,所以不会花费更长的时间。因此,请给出适当的超时,以便您可以判断主机已关闭或丢弃数据包。