2012-04-10 30 views
11

我是python套接字中的新手,真的很困擾socket.accept()方法的固執性。我真的需要一種方法來結束一個socket.accept()方法或任何其他替代socket.accept(),它只運行一次。 Plzzzz有人幫忙。如何停止python socket.accept()調用?

+2

您應該查看'socket.setblocking'函數和['select'](http://docs.python.org/library/select.html)模塊。 – 2012-04-10 14:05:00

回答

10

您有幾種選擇在這裏:

  1. 關閉從另一個線程監聽套接字 - 如果它失敗了accept()將引發異常。
  2. 打開監聽套接字的本地連接 - 這使accept()設計返回。
  3. 使用可以阻塞多個同步對象的接受機制,以便可以在沒有連接的情況下發信號通知等待。
  4. 使用accept()的非阻塞替代方案(異步方式如AcceptEx()和Windows上的重疊IO)。
+0

在Python中,'accept'會在失敗時引發異常。 – 2012-04-10 14:22:41

+0

@NiklasB。 - 謝謝。我沒有任何Python,但OP問題更多的是一般的TCP服務器問題,所有語言都需要使用相同的「技巧」。 – 2012-04-10 14:49:51

+0

你可以舉一個例子,因爲如前所述,我是一個新手......我實際上是在pygtk中編寫一個服務器。我的問題是,由於socket.accept()調用,窗口掛起。 – cybernerd 2012-04-11 08:47:11