2012-04-10 21 views
11

私はpythonソケットの初心者です。本当にsocket.accept()メソッドの頑固さに悩まされています。私は本当にsocket.accept()メソッドやsocket.accept()の代わりに1回だけ実行される方法を終了する必要があります。 Plzzzz誰かが助けます。python socket.accept()コールを停止するにはどうすればいいですか?

+2

'socket.setblocking'関数と[' select'](http://docs.python.org/library/select.html)モジュールをチェックしてください。 –

答えて

10

あなたがここにいくつかのオプションがあります:

  1. は、別のスレッドからのリスニングソケットを閉じます - それが失敗した場合accept()は、例外が発生します。
  2. リスニングソケットへのローカル接続を開きます。これにより、設計通りにaccept()が返されます。
  3. 複数の同期オブジェクトをブロックすることができる受け入れメカニズムを使用して、待機せずに接続なしで戻ることができるようにします。
  4. accept()(非同期はAcceptEx()、Windowsでは重複しているIOなど)の代わりに非ブロックを使用します。
+0

Pythonの 'accept'は、失敗した場合に例外を送出します。 –

+0

@ NiklasB。 - ありがとう。私はPythonを持っていませんが、OPの質問はより一般的なTCPサーバーの問題であり、すべての言語で同じトリックが必要です。 –

+0

あなたは先ほど述べたように私は初心者ですから、例を挙げることができますか?私は実際にpygtkにサーバーを書いています。私の問題は、socket.accept()呼び出しのためにウィンドウがハングすることです。 – cybernerd

関連する問題