Автор Тема: Timeout IO::Socket::INET  (Прочитано 3802 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн _apple_

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 10
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Timeout IO::Socket::INET
« : 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 секунд.

как бы так сделать, что бы если в две секунды не был получен ответ, закрыть сокет и не тратить драгоценное время?

Оффлайн 2NetFly

  • Модератор
  • Глобальный модератор
  • Постоялец
  • *****
  • Сообщений: 144
  • +0/-0
  • 0
    • Просмотр профиля
    • http://feotast.net
Timeout IO::Socket::INET
« Ответ #1 : 06 Апреля 2005, 08:41:56 »
Читай про сигналы и alarm.
There Is More Than One Way To Do It (c)

Оффлайн cr4ck3r

  • Фанат Perl
  • Постоялец
  • ***
  • Сообщений: 146
  • +0/-0
  • 2
    • Просмотр профиля
    • http://perlmonks.org.ru
Timeout IO::Socket::INET
« Ответ #2 : 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
Ворота в perl - perlmonks.org.ru

Оффлайн _apple_

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 10
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Timeout IO::Socket::INET
« Ответ #3 : 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 сек.

Оффлайн sargon

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 9
  • +0/-0
  • 0
    • Просмотр профиля
Timeout IO::Socket::INET
« Ответ #4 : 07 Апреля 2005, 15:27:35 »
Все очень просто.
тормоза в системном коннекте при резолве, т.е. тормоза в UDP, а таймаут то там на TCP

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28