Forum Webscript.Ru

Программирование => Perl => Тема начата: _apple_ от 06 Апреля 2005, 01:56:40

Название: Timeout IO::Socket::INET
Отправлено: _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 секунд.

как бы так сделать, что бы если в две секунды не был получен ответ, закрыть сокет и не тратить драгоценное время?
Название: Timeout IO::Socket::INET
Отправлено: 2NetFly от 06 Апреля 2005, 08:41:56
Читай про сигналы и alarm.
Название: Timeout IO::Socket::INET
Отправлено: cr4ck3r от 06 Апреля 2005, 11:52:09
my $remote = IO::Socket::INET->new( Proto => "tcp",
                PeerAddr => $host,
                PeerPort => "80" );
unless ($remote) { die "can\'t connect to $host"; }

Вот то что тебе нужно. Если сокет нельзя открыть то грохаем всю конструкцию.
А если тебе нужен таймаут после соединения используй то что тебе сказал 2NetFly
Название: Timeout IO::Socket::INET
Отправлено: _apple_ от 06 Апреля 2005, 17:50:14
Так а зачем этот таймаут, если в IO::Socket его все равное прибивают?
${*$sock}{\'io_socket_timeout\'} = delete $arg{Timeout};

или у меня под виндой только так тормозит? Люди, у кого реально пашет таймаут? Здесь же черным по белому написано.
The requests is aborted if no activity on the connection ... у меня на все кроме 200 OK ответ около 10 сек.
Название: Timeout IO::Socket::INET
Отправлено: sargon от 07 Апреля 2005, 15:27:35
Все очень просто.
тормоза в системном коннекте при резолве, т.е. тормоза в UDP, а таймаут то там на TCP