代码之家  ›  专栏  ›  技术社区  ›  Elias Bachaalany

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

  •  0
  • Elias Bachaalany  · 技术社区  · 14 年前

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

    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 回复  |  直到 14 年前
        1
  •  4
  •   pyfunc    14 年前

    使用一个非阻塞的套接字并调用accept。

    s.setblocking(0)
    

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

    socket.settimeout(value)
    

    您的代码中似乎还有一个问题

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

    conn, address = s.accept()