Perl: установить тайм-аут чтения в клиентском сокете - PullRequest
1 голос
/ 23 декабря 2010

Я создал сокет клиента tcp, после создания сокета было установлено соединение с сервером.Затем я читаю контент с сервера.В этом случае.Мне нужно ждать только 10 секунд в чтении.Если ничего не читается.Он должен вернуться в указанное время ожидания.какой путь ...?

Спасибо

Ответы [ 2 ]

3 голосов
/ 23 декабря 2010

Предполагая, что вы используете стандартный модуль IO :: Socket (хотя существуют и более старые способы), вы вызываете метод timeout, чтобы установить время ожидания до 10 перед чтением.

1 голос
/ 23 декабря 2010

тревога perldoc -f

Если вы хотите использовать alarm для тайм-аута системного вызова, вам нужно использовать пару eval / die. Вы не можете полагаться на сигнал тревоги, приводящий к сбою системного вызова, если $! установлено на EINTR, поскольку Perl устанавливает обработчики сигналов для перезапуска системных вызовов в некоторых системах. Использование eval / die всегда работает, по модулю предостережений, приведенных в Сигналы в perlipc .

eval {
    local $SIG{ALRM} = sub { die "alarm\n" }; # NB: \n required
    alarm $timeout;
    $nread = sysread SOCKET, $buffer, $size;
    alarm 0;
};
if ($@) {
    die unless $@ eq "alarm\n";   # propagate unexpected errors
    # timed out
}
else {
    # didn't
}

Для получения дополнительной информации см. perlipc .

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