2011-02-23 3 views
1

udp 소켓을 연 후 프로세스가 분기 된 경우 Linux 시스템에서 읽기 작업을 선택하는 방법은 무엇입니까? 특히 - 것이 가능한 그 프로그램의 종류 :포크 후 읽기 선택

so = open socket 
fork 
for(;;) { 
    select() for reading on socket so 
    recv from so 
} 

(가 대기 프로세스가 통지되기 전에/이탈 선택 도착할 경우) 과정과의 두번째 하나만 일어나 두 가지 패킷 그 패킷들은 수신되지 않을 것입니까?

UDP의 경우 모든 패킷이 항상 프로세스를 깨우거나 플래그를 설정 한 상태로 유지할 수 있습니까?

답변

1

각 프로세스, 부모 및 자식에는 동일한 소켓에 대한 설명자가 있습니다. 파일 별 디스크립터 속성은 독립적입니다 (예 : 블로킹, 소켓 닫기 가능).

시나리오에서 프로세스 중 하나가 깨어나고 다른 프로세스가 선택되기 전에 소켓에서 데이터를 읽는 것이 실제로 가능합니다.

0

귀하의 질문에 실제로 영향을받지 않습니다 fork().

select()은 읽기 세트의 파일 디스크립터 중 하나가 읽을 수있는 경우를 반환합니다. 읽지 않고 select() 번으로 다시 전화하면 읽을 수 있습니다. 읽을 데이터가 더 이상 없을 때까지 읽을 수 있습니다.

즉, select()은 에지 트리거가 아닌 레벨 트리거입니다.