The OpenNET Project / Index page

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

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

"Как прибить recvfrom по таймауту в многопоточном коде?"  
Сообщение от krivenok email(ok) on 13-Ноя-06, 16:52 
Проблема в следующем:
...
rc = recvfrom(...); // Блокирует тред
...

Я знаю решения проблемы, но вот как в тредах их применять...
1) alarm
Просто делаем alarm(TIMEOUT) и ловим errno==EINTR.
Это работает хорошо в однопоточных программах, но возникает вопрос -
какой тред получит SIGALARM? Да и как вообще обрабатывать сигналы
в тредах, ведь action'ы вроде задаются на процесс, а на тред
только маски.
2) MSG_DONTWAIT
Задать неблокирующее чтение и ловить EAGAIN.
При этом вызывать нужно в цикле и делать какую-то (хоть даже малую)
задержку.
Возникает вопрос - как делать задержку?
Ведь select(1,0,0,0,&timeout) в тредах вроде тоже вызывать нельзя
(not thread safe).
А задержка с дискретом в секунду меня не устроит.
3) select
Not thread safe.
4) SO_SNDTIMEO / SO_RCVTIMEO
После вот таких описаний желание использовать пропадает:

SO_{SND,RCV}TIMEO are probably the most widely
unimplemented, or strangely/incompatibly implemented, of all
common sockopts in existence... Basically, in short, NEVER
try to use them for anything... ;-)

Короче - как _грамотно_ решается подобная задача?

Спасибо!

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

 Оглавление

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


1. "Как прибить recvfrom по таймауту в многопоточном коде?"  
Сообщение от Dead Mustdie email on 14-Ноя-06, 14:01 
man poll

+ отдельный поток обнаружения событий
+ пул рабочих потоков
+ очередь от потока обнаружения событий до пула рабочих потоков

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

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

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




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

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