Специалистам хорошо разбирающимся в сетевых вопросах. есть такой вот скриптик: #!/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