[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

ручка?



Специалистам хорошо разбирающимся в сетевых вопросах.

есть такой вот скриптик:

#!/usr/bin/perl

use warnings;
use strict;

use utf8;
use open qw(:std :utf8);
use IO::Socket::INET;

my $port = $ARGV[0];

while(1) {
    my $s = IO::Socket::INET->new(PeerAddr => '127.0.0.1', PeerPort => $port);
    printf "Приконнектились: %s\n", $s ? 'да' : $!;
    close $s if $s;
}

далее берем любой сервис, например nginx (ковырялся с разными,
наткнулся не на nginx, на нем тоже повторяется)

запускаем

perl test.pl 80

и видим такой лог:

...
Приконнектились: да
Приконнектились: да
...
Приконнектились: Cannot assign requested address
...

при этом если мониторить число сокетов в /proc/<script-pid>/fd то у
скрипта и nginx оно небольшое. менее 10 на каждого. то есть отсюда
делаем вывод, что сокеты закрываются корректно, полностью.

далее все приложения в системе будут ругаться либо той же ошибкой,
либо Address already in use.

После остановки приложения, спустя некоторое время (несколько
[десятков] секунд) все приложения опять могут выполнять произвольную
сетевую активность...

Соответственно очень похоже на то, что порт в систему возвращается
какое-то время и большая частота "открыть коннект-закрыть коннект"
приводит к их исчерпанию.

соответственно вопросы:

1. может можно как-то скрипт поправить на тему чтобы на данную ошибку
не натыкаться?
2. может есть ручка общесистемная изменить это поведение?
3. может это у меня проблема какая-то хардварная?
4. что об этом почитать?
-- 

. ''`.                               Dmitry E. Oboukhov
: :’  :   email: unera@debian.org jabber://UNera@uvw.ru
`. `~’              GPGKey: 1024D / F8E26537 2006-11-21
  `- 1B23 D4F8 8EC0 D902 0555  E438 AB8C 00CF F8E2 6537

Attachment: signature.asc
Description: Digital signature


Reply to: