我使用
我没有粘贴完整的代码,因为它是通用的
sendto
发送 UDP 数据包,然后通过 recv
接收答案。如果 recv
没有接收到回复,程序将无法继续进行。但是,UDP 数据包可能会丢失,或者由于某些原因,数据包可能无法被传递,以至于程序会卡在 recv
行上。我想知道如何设置 recv
的超时时间,如果在一分钟内没有收到任何数据包,则跳过该行并继续执行代码?我没有粘贴完整的代码,因为它是通用的
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
进行轮询?当然,还有recv
的MSG_DONTWAIT
标志(这是 Linux 特定的扩展)。 - Some programmer dude