The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Неблокируемый ввод/вывод"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Неблокируемый ввод/вывод"  
Сообщение от iva (ok) on 09-Фев-07, 11:26 
Есть проблема. Необходимо, чтобы стоял таймер на recv и вывод был неблокируемым. Есть  следующий код:

timeval tv;
tv.tv_sec = 30;

setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv));
for(;;)
   {
   int nbyte = recv(fd, buf, nbyte, MSG_DONTWAIT);
   if (nbyte < 0)  {
      if (errno == EWOULDBLOCK) ........
      ........
      }
   }
Так как recv стоит в неблокирующем режиме постоянно возникает ошибка EWOULDBLOCK и флаг SO_RCVTIMEO теряет первоначальный смысл. Подскажите как справиться с этой проблемой.
    

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "Неблокируемый ввод/вывод"  
Сообщение от BigHo on 09-Фев-07, 12:21 
>Так как recv стоит в неблокирующем режиме постоянно возникает ошибка EWOULDBLOCK и
>флаг SO_RCVTIMEO теряет первоначальный смысл. Подскажите как справиться с этой проблемой.

Тебе могут помочь функции ожидания: select(2), poll(2), pselect(2), epoll(2:Linux), kevent(2:FreeBSD). Для совместимости пекомендую poll и select. Для точности: pselect, kevent. Тебе может даже не понадобиться назначать timeout на соединение.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру