delete $conn->{send_offset};
$offset = 0;
shift @$rq;
- last unless $flush; # Go back to select and wait
+ #last unless $flush; # Go back to select and wait
# for it to fire again.
}
# Call me back if queue has not been drained.
- if (@$rq) {
- set_event_handler ($sock, write => sub {$conn->_send(0)});
- } else {
+ unless (@$rq) {
set_event_handler ($sock, write => undef);
if (exists $conn->{close_on_empty}) {
&{$conn->{eproc}}($conn, undef) if exists $conn->{eproc};
&{$conn->{eproc}}($conn, $!) if exists $conn->{eproc};
$conn->disconnect;
} else {
- $conn->dequeue if exists $conn->{msg};
+ unless ($conn->{disable_read}) {
+ $conn->dequeue if exists $conn->{msg};
+ }
}
}
}
}
+sub disable_read
+{
+ my $conn = shift;
+ set_event_handler ($conn->{sock}, read => undef);
+ return $_[0] ? $conn->{disable_read} = $_[0] : $_[0];
+}
+
#
#----------------------------------------------------
# Event loop routines used by both client and server