2013-10-23 2 views
0

약간의 문제가 있지만 해결 방법을 찾지 못했습니다.UDP 메시지를 받지만 아무 것도없는 경우 이동합니다.

문제는 아주 단순한 것 같습니다.

나는 프로세스가 있습니다. 이 프로세스 내에서 사용중인 포트로 UDP 메시지가 전송되었는지 확인하고 싶습니다. 보낸 메시지가있는 경우 전체를 보내고받을 수 있습니다. 전송 된 메시지가 없으면 프로세스는 메시지를 기다리고 있으며 다음 메시지가 전송 될 때까지 프로그램이 진행되지 않습니다.

질문은 메시지가 없으면 프로세스를 계속 진행할 수 있도록 코드를 수정하는 방법입니다.

내 코드 (UDP 메시지를 수신하기위한 표준 코드) :

if((nbrecv = recvfrom(s, buffer, BUFFER_SIZE, 0, &remote, &len_remote)) == -1){ 
    fprintf(stderr, "failure!\n"); 
    exit(-1); 
} 

etc. 

답변

2

옵션은 다음과 같습니다

  1. 등을 사용 select(), poll(), epoll()는, 호출하는 대신 데이터를 기다리는 recvfrom() 직접
  2. fcntl()을 사용하여 소켓에 O_NONBLOCK 플래그를 설정하여 소켓을 비 블로킹으로 설정하십시오. 그러면 recvfrom()이 차단 대신 즉시 반환됩니다.
  3. (권장하지 않음) SO_RCVTIMEO 소켓 옵션을 사용하여 수신 제한 시간을 설정하십시오.
관련 문제