ph0enix has asked for the wisdom of the Perl Monks concerning the following question:
Hi all
How can be closed client connection @ server side if server is based on Net::Server::Multiplex module? In my code I used
for $h ($mux->handles()) { if ($fhs->{$h}{object}{user}{_id} == $id) { $mux->remove($h); # remove from multiplexer loop $mux->close($h); # close handle last; } }
to find handle of connection to be closed an close it. Sometimes this works ok, but sometimes it broke down whole server with message 'Use of uninitialized value in exists at /opt/perl-5.8.0_t/lib/site_perl/5.8.0/IO/Multiplex.pm line 596 (#1)'. IO::Multiplex contain
591: 592: foreach my $fh (values %{$self->{_handles}}) { 593: # Avoid creating a permanent empty hash ref for "$fh" 594: # by attempting to access its {object} element 595: # if it has already been closed. 596: next unless exists $self->{_fhs}{$fh}; 597:
$mux->remove($h) call shold remove entry for closed connection from this %{$self->{_handles}} hash. Is it a race condition? How to fix it?
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: Net::Server::Multiplex - how to safe close client connection?
by ph0enix (Friar) on Apr 29, 2004 at 14:51 UTC |