Мониторинг нескольких сокетов - PullRequest
0 голосов
/ 04 июля 2011

Я разрабатываю программу на python, которая будет одновременно общаться с двумя другими процессами через сокеты. Одним из процессов является демон C, поэтому этот сокет будет работать постоянно - никаких проблем там нет. Другой процесс - веб-страница PHP. Так что сокет не устанавливается все время. В большинстве случаев сокет прослушивает () порт.

Если оба сокета все время живы, можно использовать простой вызов select () для контроля ввода от обоих. Но в моей ситуации это невозможно. Как мне этого легко добиться?

Спасибо

1 Ответ

2 голосов
/ 04 июля 2011

Вы можете использовать select () в этом случае, даже в однопоточной однопроцессной программе с только блокирующими сокетами.Вот как вы принимаете входящие соединения с помощью select ():

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...