>Вкратце: когда клиент рвёт соединение, сервер получает
>для обработки милый такой сигнальчик под названием
>SIGPIPE. Действие по умолчанию для него - прервать
>процесс сервера, что при обработке нескольких
>клиентов есть сущее безобразие. Нужно выставить
>свой обработчик. IMHO, разумеется.
foreach $client ($select->can_read(1)){
$client->recv($inbuffer{$client}, POSIX::BUFSIZ, 0);
........... }
............
foreach $client ($select->can_write(1)){
$client->send($outbuffer{$client}, POSIX::BUFSIZ, 0)
if (0){ #в случаи SIGPIPE клиен автоматически удалится?
# или всеже этот код нужно выпролнить после того как
#будет получен SIGPIPE ?
delete $inbuffer{$client};
delete $outbuffer{$client};
$select->remove($client);
close $client;
}}
Вот что интересно.. без $SIG{PIPE} = 'IGNORE';
т.е. $SIG{PIPE} пока негде не учитываю.
При обрыве коннекта, сервак циклется на
foreach $client ($select->can_read(1)){
т.е. сервак не умират, а считает что из сокета можно читать
вот это я не могу понять..