Forum Webscript.Ru
Программирование => Perl => Тема начата: _apple_ от 06 Апреля 2005, 01:56:40
-
Всем привет,
вот тут проблема,
сижу под виндой, нужно быстрое открытие сокета и его закрытие при неудаче.
my $sock = IO::Socket::INET->new(PeerAddr => $host,
PeerPort => $port,
Proto => \'tcp\',
Timeout => 2,
$self->_extra_sock_opts($host, $port),
);
так, вот сколько Timeout не ставь все равно томозит более 10 секунд.
как бы так сделать, что бы если в две секунды не был получен ответ, закрыть сокет и не тратить драгоценное время?
-
Читай про сигналы и alarm.
-
my $remote = IO::Socket::INET->new( Proto => "tcp",
PeerAddr => $host,
PeerPort => "80" );
unless ($remote) { die "can\'t connect to $host"; }
Вот то что тебе нужно. Если сокет нельзя открыть то грохаем всю конструкцию.
А если тебе нужен таймаут после соединения используй то что тебе сказал 2NetFly
-
Так а зачем этот таймаут, если в IO::Socket его все равное прибивают?
${*$sock}{\'io_socket_timeout\'} = delete $arg{Timeout};
или у меня под виндой только так тормозит? Люди, у кого реально пашет таймаут? Здесь же черным по белому написано.
The requests is aborted if no activity on the connection ... у меня на все кроме 200 OK ответ около 10 сек.
-
Все очень просто.
тормоза в системном коннекте при резолве, т.е. тормоза в UDP, а таймаут то там на TCP