Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much
 
PerlMonks  

Net::Server::Multiplex - how to safe close client connection?

by ph0enix (Friar)
on Apr 26, 2004 at 11:10 UTC ( [id://348136]=perlquestion: print w/replies, xml ) Need Help??

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

    It seems to be ok if shutdown is used instead of remove and close.

    for $h ($mux->handles()) { if ($fhs->{$h}{object}{user}{_id} == $id) { $mux->shutdown($h, 2); last; } }

    One is not supposed to modify arrays while they are being iterated over. There was problem because freed value used in iteration in $mux->loop, so the perl saw freed value and segfault.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://348136]
Approved by cyocum
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others having a coffee break in the Monastery: (5)
As of 2025-06-13 16:39 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?
    erzuuliAnonymous Monks are no longer allowed to use Super Search, due to an excessive use of this resource by robots.