我按sendto
發送一個UDP數據包,然後通過recv
接收到答案,如果recv
沒有收到答覆,程序不會繼續。但是,udp數據包可能會丟失,或者出於某種原因,數據包可能無法發送,因此程序卡在recv
行。我想知道如果nopacket到達例如一分鐘後,如何設置recv
的超時時間,然後跳過該行並繼續執行代碼?設置UDP套接字的recv fcn的超時時間
我不粘貼完整的代碼,因爲它是一個通用的udp
代碼,我的問題與唯一的recv
有關。最後一點,開發環境是linux。
unsigned long buf[maxlen];
struct protoent *proto; //
struct sockaddr_in server_addr;
int s; // socket
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family=AF_INET;
server_addr.sin_addr.s_addr = inet_addr(hostname);
sendto(s,msg,sizeof(msg),0,(struct sockaddr *)&server_addr,sizeof(server_addr));
recv(s,buf,sizeof(buf),0);
使插座非阻塞?或者使用例如用於輪詢的['select'](http://pubs.opengroup.org/onlinepubs/009695399/functions/select.html)?當然還有'recv'的'MSG_DONTWAIT'標誌(這是Linux專用的擴展)。 – 2013-04-23 07:22:38