paramètre de délai d'attente pour recv fcn d'une socket UDP

- Je envoyer un paquet UDP par sendto, puis de recevoir la réponse par recv.si recv ne reçoit pas de réponse, le programme ne se déroule pas. Cependant, le paquet udp peuvent être perdus, ou pour une raison quelconque, le paquet ne peut pas être livré, de sorte que le programme reste bloqué sur recv ligne. Je me demande comment est-il possible de définir un délai d'attente pour recv si nopacket arrive ,par exemple, une minute, puis sauter la ligne et passer le code?

Je ne suis pas coller le code complet car c'est un générique udp code et ma question est liée à la seule recv. Pour la note finale, l'environnement de développement de 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);
Faire le socket non bloquant? Ou d'utiliser, par exemple, select pour l'interrogation? Et bien sûr il y a le MSG_DONTWAIT drapeau pour recv (ce qui est spécifique à Linux extension).

OriginalL'auteur sven | 2013-04-23