Специалистам хорошо разбирающимся в сетевых вопросах.
есть такой вот скриптик:
#!/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: [email protected] jabber://[email protected]
`. `~’ GPGKey: 1024D / F8E26537 2006-11-21
`- 1B23 D4F8 8EC0 D902 0555 E438 AB8C 00CF F8E2 6537
signature.asc
Description: Digital signature

