таймаут в неболкирующихся сокетах
От: 9msn  
Дата: 13.10.03 08:04
Оценка:
Я посылаю UDP broadcast запрос в поисках определённого сервиса.
Ответов может прйти несколько, может ни одного.
Жду ответа с помощью WSAAsyncSelect. Но ждать то надо определённое время, по истечении которого ответ уже не валиден.
В WSAAsyncSelect опций на истечение времени ожидания нет. Как быть?
Переписывать на блокирующиеся сокеты, с выделением потока под приём? Или есть способ лучше?
Re: таймаут в неболкирующихся сокетах
От: sercher Украина  
Дата: 13.10.03 08:09
Оценка:
9>Я посылаю UDP broadcast запрос в поисках определённого сервиса.
9>Ответов может прйти несколько, может ни одного.
9>Жду ответа с помощью WSAAsyncSelect. Но ждать то надо определённое время, по истечении которого ответ уже не валиден.
9>В WSAAsyncSelect опций на истечение времени ожидания нет. Как быть?
9>Переписывать на блокирующиеся сокеты, с выделением потока под приём? Или есть способ лучше?

А свой таймер запустить?
Re: таймаут в неболкирующихся сокетах
От: Vamp Россия  
Дата: 13.10.03 08:37
Оценка:
Попробуй эвенты и жди их ограниченное время?
Да здравствует мыло душистое и веревка пушистая.
Re[2]: таймаут в неболкирующихся сокетах
От: npo_mir  
Дата: 13.10.03 09:25
Оценка:
Ну можно, но не очень красиво.
Posted via RSDN NNTP Server 1.7 "Bedlam"
Re: таймаут в неболкирующихся сокетах
От: GarikTot  
Дата: 13.10.03 16:14
Оценка:
Здравствуйте, 9msn, Вы писали:


9>Я посылаю UDP broadcast запрос в поисках определённого сервиса.

9>Ответов может прйти несколько, может ни одного.
9>Жду ответа с помощью WSAAsyncSelect. Но ждать то надо определённое время, по истечении которого ответ уже не валиден.
9>В WSAAsyncSelect опций на истечение времени ожидания нет. Как быть?
9>Переписывать на блокирующиеся сокеты, с выделением потока под приём? Или есть способ лучше?

Возможно я не прав , но кто мешает сделать так:

   timeval tmv; // сюда заносишь реальное значение тайм-аута
  
   fd_set ready;
   FD_ZERO(&ready);
   FD_SET(sock, &ready);

   int res = select(sock + 1, &ready, 0, 0, &tmv);
   if(res < 0){
      //-------------------------- error
   }else if(res == 0){
      //-------------------------- timeout
   }else{
      // ---- всё ok
   }
Re: таймаут в неболкирующихся сокетах
От: DOOM Россия  
Дата: 14.10.03 08:34
Оценка:
Здравствуйте, 9msn, Вы писали:


9>Я посылаю UDP broadcast запрос в поисках определённого сервиса.

9>Ответов может прйти несколько, может ни одного.
9>Жду ответа с помощью WSAAsyncSelect. Но ждать то надо определённое время, по истечении которого ответ уже не валиден.
9>В WSAAsyncSelect опций на истечение времени ожидания нет. Как быть?
9>Переписывать на блокирующиеся сокеты, с выделением потока под приём? Или есть способ лучше?

Порождай поток, который создает этот сокет и живет заданное время...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.