window c ++:如何在基于udp的对话中超时receiveFrom函数

时间:2010-03-18 22:07:04

标签: c++ windows timeout udp

我正在尝试在UDP之上创建可靠的服务。 这里我需要超时receiveFrom窗口c ++的功能,如果没有数据包到达 在指定的时间。 在java中我这样做DatagramSocket.setSoTimeout但我不知道如何在windows c ++中实现这一点。

感谢

2 个答案:

答案 0 :(得分:3)

专门查看setsockopt() SO_RCVTIMEO

答案 1 :(得分:3)

尝试使用select。这将适用于TCP和UDP套接字。只是另一种方法来做同样的事情,如Len的答案,但不是为套接字上的所有recv操作设置超时,你可以设置逐个呼叫的超时长度。

 #include <errno.h>
 #include <stdio.h>
 #include <unistd.h>
 #include <sys/types.h>
 #include <sys/time.h>

 int
 input_timeout (int filedes, unsigned int seconds)
 {
   fd_set set;
   struct timeval timeout;

   /* Initialize the file descriptor set. */
   FD_ZERO (&set);
   FD_SET (filedes, &set);

   /* Initialize the timeout data structure. */
   timeout.tv_sec = seconds;
   timeout.tv_usec = 0;

   /* select returns 0 if timeout, 1 if input available, -1 if error. */
   return TEMP_FAILURE_RETRY (select (FD_SETSIZE,
                                      &set, NULL, NULL,
                                      &timeout));
 }

 int
 main (void)
 {
   fprintf (stderr, "select returned %d.\n",
            input_timeout (STDIN_FILENO, 5));
   return 0;
 }