如何在Python中执行非阻塞accept()?

时间:2010-09-30 08:45:03

标签: python sockets nonblocking

我不能使用线程,因此我想编写一段时间后可以中断的服务器程序:

d = show_non_modal_dialog("serving clients")
s = socket(...)
s.bind(...)
s.listen()
while (!user_pressed_cancel())
{
  s.accept() # timed accept for like 1 second
  if timed_out:
    continue
  serve_client
  close_client_sock
}
hide_non_modal_dialog(d)

1 个答案:

答案 0 :(得分:4)

使用非阻塞套接字并在其上调用accept。

s.setblocking(0)

您还可以设置阻止套接字操作的超时

socket.settimeout(value)

您的代码中似乎也存在问题

accept()返回一个(conn,address)对值。所以你的代码应该是

conn, address = s.accept()