2011-07-04 10 views
0

私は、ソケットを介して同時に2つの他のプロセスと話すことになるpythonプログラムを設計しています。プロセスの1つはCデーモンですので、このソケットは常に問題なく動作します。もう一つのプロセスはPHPのWebページです。そのソケットは常に確立されていません。ほとんどの場合、ソケットはポート上のlisten()です。複数のソケット監視

両方のソケットが常に稼動している場合は、単純なselect()呼び出しを使用して両方からの入力を監視できます。しかし、私の状況では、これは不可能です。どうすればこれを簡単に達成できますか?

おかげで、

+0

select(rlist)の呼び出しの周りをループすると、ソケットの状態の変化が検出されたときにrlistを調整できなくなるのはなぜですか? –

+0

@jd:pythonプログラムは単一のプロセスです。ソケットクライアントが接続するのを待っていると、ブロックされます。 – lang2

+0

リスニングソケットで選択できます。準備ができたら、mySocket.accept()を呼び出します。 –

答えて

2

あなただけのブロッキングソケットでも、シングルスレッドの単一プロセスのプログラムで、この場合は()を選択し使用することができます。

daemonSocket = socket.socket() 
... 
phpListenSocket = socket.socket() 
phpListenSocket.bind(...) 
phpListenSocket.listen(...) 
phpSocket = None 

while True: 
    rlist = ... 
    rready, wready, eready = select(rlist, [], []) 
    if phpListenSocket in rready: 
     phpSocket, remoteAddr = phpListenSocket.accept() 
関連する問題