Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?

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

by ph0enix (Friar)
on Apr 26, 2004 at 11:10 UTC ( #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/ 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?

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

How do I use this? | Other CB clients
Other Users?
Others scrutinizing the Monastery: (4)
As of 2023-05-28 17:03 GMT
Find Nodes?
    Voting Booth?

    No recent polls found