2011-07-04 3 views
0

소켓을 통해 동시에 두 개의 다른 프로세스와 통신 할 수있는 Python 프로그램을 설계하고 있습니다. 프로세스 중 하나는 C 데몬이므로 항상이 소켓이 살아있을 것입니다. 문제는 없습니다. 다른 프로세스는 PHP 웹 페이지입니다. 그래서 그 소켓은 항상 확립되지 않습니다. 대부분의 경우 소켓은 포트에서 listen()입니다.다중 소켓 모니터링

소켓이 항상 활성화되어 있으면 간단한 select() 호출을 사용하여 두 입력의 입력을 모니터 할 수 있습니다. 하지만 제 상황에서는 불가능합니다. 어떻게 이것을 쉽게 할 수 있습니까?

감사합니다,

+0

select (rlist) 호출을 반복하는 경우 소켓 상태의 변화가 감지되면 rlist를 적용하지 못하도록 막으려면 어떻게해야합니까? –

+0

@jd : 파이썬 프로그램은 단일 프로세스입니다. 따라서 소켓 클라이언트에서 연결 대기 중일 경우 차단됩니다. – 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()