use strict;
+use DXUtil;
+
use vars qw($VERSION $BRANCH);
-$VERSION = sprintf( "%d.%03d", q$Revision$ =~ /(\d+)\.(\d+)/ );
-$BRANCH = sprintf( "%d.%03d", q$Revision$ =~ /\d+\.\d+\.(\d+)\.(\d+)/ || (0,0));
-$main::build += $VERSION;
-$main::branch += $BRANCH;
+($VERSION, $BRANCH) = dxver(q$Revision$);
use IO::Select;
use IO::Socket;
use DXDebug;
use Timer;
-use vars qw(%rd_callbacks %wt_callbacks %er_callbacks $rd_handles $wt_handles $er_handles $now %conns $noconns $blocking_supported $cnum);
+use vars qw(%rd_callbacks %wt_callbacks %er_callbacks $rd_handles $wt_handles $er_handles $now %conns $noconns $blocking_supported $cnum $total_in $total_out);
%rd_callbacks = ();
%wt_callbacks = ();
$rd_handles = IO::Select->new();
$wt_handles = IO::Select->new();
$er_handles = IO::Select->new();
+$total_in = $total_out = 0;
$now = time;
require POSIX; POSIX->import(qw(O_NONBLOCK F_SETFL F_GETFL))
};
if ($@ || $main::is_win) {
-# print STDERR "POSIX Blocking *** NOT *** supported $@\n";
- $blocking_supported = 0;
+ $blocking_supported = IO::Socket->can('blocking') ? 2 : 0;
} else {
- $blocking_supported = 1;
-# print STDERR "POSIX Blocking enabled\n";
+ $blocking_supported = IO::Socket->can('blocking') ? 2 : 1;
}
return unless $blocking_supported;
# Make the handle stop blocking, the Windows way.
- if ($main::is_win) {
- # 126 is FIONBIO (some docs say 0x7F << 16)
- ioctl( $_[0],
- 0x80000000 | (4 << 16) | (ord('f') << 8) | 126,
- "$_[1]"
- );
+ if ($blocking_supported) {
+ $_[0]->blocking($_[1]);
} else {
my $flags = fcntl ($_[0], F_GETFL, 0);
if ($_[1]) {
my $ip = gethostbyname($to_host);
return undef unless $ip;
-# my $r = $sock->connect($to_port, $ip);
my $r = connect($sock, pack_sockaddr_in($to_port, $ip));
return undef unless $r || _err_will_block($!);
# return to the event loop only after every message, or if it
# is likely to block in the middle of a message.
- if ($conn->{blocking} != $flush) {
- blocking($sock, $flush);
- $conn->{blocking} = $flush;
- }
+# if ($conn->{blocking} != $flush) {
+# blocking($sock, $flush);
+# $conn->{blocking} = $flush;
+# }
my $offset = (exists $conn->{send_offset}) ? $conn->{send_offset} : 0;
while (@$rq) {
my $call = $conn->{call} || 'none';
dbgdump('raw', "$call send $bytes_written: ", $msg);
}
+ $total_out += $bytes_written;
$offset += $bytes_written;
$bytes_to_write -= $bytes_written;
}
$bytes_read = sysread ($sock, $msg, 1024, 0);
if (defined ($bytes_read)) {
if ($bytes_read > 0) {
+ $total_in += $bytes_read;
if (isdbg('raw')) {
my $call = $conn->{call} || 'none';
dbgdump('raw', "$call read $bytes_read: ", $msg);