Окно C ++: как отключить функцию receiveFrom в разговоре, основанном на udp - PullRequest
1 голос
/ 19 марта 2010

Я пытаюсь создать надежный сервис поверх UDP. Здесь мне нужно время ожидания receiveFrom функции окна C ++, если не приходит пакет в указанное время. В Java я делаю это DatagramSocket.setSoTimeout, но я не знаю, как этого добиться в Windows C ++.

спасибо

Ответы [ 2 ]

3 голосов
/ 19 марта 2010

Попробуйте использовать , выберите . Это будет работать как с сокетами TCP, так и с UDP. Еще один способ сделать то же самое, что и в ответе Лена, но вместо установки времени ожидания для всех операций 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;
 }
3 голосов
/ 19 марта 2010

Взгляните на setsockopt() специально SO_RCVTIMEO.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...