我按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