#
# I have modified it to suit my devious purposes (Dirk Koopman G1TLH)
#
+# $Id$
+#
+
package Msg;
require Exporter;
my $sock = delete $conn->{sock};
return unless defined($sock);
set_event_handler ($sock, "read" => undef, "write" => undef);
- close($sock);
+ shutdown($sock, 3);
+ close($sock);
}
sub send_now {
while (@$rq) {
my $msg = $rq->[0];
- my $bytes_to_write = length($msg) - $offset;
+ my $mlth = length($msg);
+ my $bytes_to_write = $mlth - $offset;
my $bytes_written = 0;
- while ($bytes_to_write) {
+ confess("Negative Length! msg: '$msg' lth: $mlth offset: $offset") if $bytes_to_write < 0;
+ while ($bytes_to_write > 0) {
$bytes_written = syswrite ($sock, $msg,
$bytes_to_write, $offset);
if (!defined($bytes_written)) {
# be called back eventually, and will resume sending
return 1;
} else { # Uh, oh
+ delete $conn->{send_offset};
$conn->handle_send_err($!);
return 0; # fail. Message remains in queue ..
}
fcntl ($_[0], F_SETFL(), $flags);
}
}
+
sub handle_send_err {
# For more meaningful handling of send errors, subclass Msg and
# rebless $conn.
}
}
+sub close_server
+{
+ set_event_handler ($main_socket, "read" => undef);
+ $main_socket->close;
+ $main_socket = 0;
+}
+
#----------------------------------------------------
# Event loop routines used by both client and server