python套接字对象接受超时

时间:2011-09-08 21:05:20

标签: python sockets

问题:python中的socket.accept()函数是否有某种超时或中断?


的信息:

我有一个程序,它有一个子线程绑定到一个端口,并不断接受和管理并将它们传递给主线程的队列。现在我正试图让子线程中断,以便它可以适当地解构。我认为我可以简单地停止子线程并让父母解构孩子,但是在其他时候我希望能够提前返回接受,所以我决定这将是最有用的方法。

那么,有没有一种方法可以让我有一个超时或取消接受方法,这样线程可以返回没有先连接到它的东西?

3 个答案:

答案 0 :(得分:11)

您可以使用

设置默认超时
import socket
print socket.getdefaulttimeout()
socket.setdefaulttimeout(60)

AFAIK这将影响所有套接字操作

答案 1 :(得分:7)

也许settimeout()正是您所寻找的。

答案 2 :(得分:7)

您可以在此示例中使用settimeout()

import socket

tcpServer = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
tcpServer.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 
tcpServer.bind(('0.0.0.0', 10000)) # IP and PORT

stopped = False
while not stopped:
  try:
    tcpServer.settimeout(0.2) # timeout for listening
    tcpServer.listen(1) 
    (conn, (ip, port)) = tcpServer.accept() 
  except socket.timeout:
    pass
  except:
    raise
  else:
    # work with the connection, create a thread etc.
    ...

循环将一直运行,直到stopped设置为true,然后在(最多)您设置的超时后退出。 (在我的应用程序中,我将连接句柄传递给新创建的线程并继续循环,以便能够接受进一步的同时连接。)