LINUX.ORG.RU

[опрос] socket I/O timeouts


0

1

Задача: в приложении для POSIX-систем, использующем сокеты, понадобилось реализовать тайм-аут на N секунд на чтение. Ваш вариант:

(0) опрос - говно
(1) я не программирую приложения для POSIX-систем, использущее сокеты
(2) изменю алгоритм, чтобы не использовать тайм-аут на чтение из сокета
(3) сделаю setsockopt(... SO_RCVTIMEO...)
(4) воспользуюсь select/poll
(5) воспользуюсь ОС-специфичным решением
(6) сделаю свою реализацию
(7) другой вариант ответа

Комментарии и обоснования выбора приветствуются.

★★★★

eval {
 local $SIG{ALRM} = sub { die "alarm\n" };
 alarm $timeout;
 $nread = sysread SOCKET, $buffer, $size;
 alarm 0;
};
if ($@) {
 die unless $@ eq "alarm\n";
}
else {
 # пронесло
}
AITap ★★★★★ ()

select/poll/epoll/kqueue и т.п.

Ибо негоже просто так висеть на чтении из одного сокета - это время надо тратить с пользой.

dmitry_vk ★★★ ()

select и иже с ним (4)

По возможности не вручную, а посредством event-driven фреймворка на языке проекта.

shylent ()

3, 4 :)
а вообще, евент дривен, то есть 2

zJes ★★ ()

вообще, надо смотреть проект. Но чисто навскидку с закрытыми глазами - select.

MuZHiK-2 ★★★★ ()

мы зачем-то на alarm сделали. Хотя логичнее наверное setsockopt

maxcom ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.