2013-10-23 63 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套接字選項設置接收超時。