>> =head1 Detecting a Client Abort >> >> # IsClientConnected? Might already be disconnected for busy >> # site, if a user hits stop/reload >> >> my $conn = $r->connection; >> my $is_connected = $conn->aborted ? 0 : 1; >> if($is_connected) { >> if (defined(my $fileno = $conn->fileno(0))) { >> my $s = IO::Select->new($fileno); >> $is_connected = $s->can_read(0) ? 0 : 1; >> } else { $is_connected = 0 } >> } >> >> You may also implement this without using the IO::Select module >> >> my $is_connected = 1; >> my $conn = $r->connection; >> # check Apache::Connection abort status >> if($conn->aborted) { $is_connected = 0 } >> else { >> if (defined(my $fileno = $conn->fileno(0))) { >> vec(my $rbit = '', $fileno, 1) = 1; # enable fd in vector table >> select($rbit, undef, undef, 0); # select for readable handles >> $is_connected = vec($rbit, $fileno, 1) ? 0 : 1; # check fd in >> vector table >> } else { $is_connected = 0 } >> } > > > looks good.
I think this is a more elegant solution http://www.modperlcookbook.org/code/ch04/Cookbook/CheckConnection.pm --Geoff