Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer

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/ 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?Last hourOther CB clients
Other Users?
Others rifling through the Monastery: (6)
As of 2024-06-19 13:43 GMT
Find Nodes?
    Voting Booth?

    No recent polls found

    erzuuli‥ 🛈The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.