X-Git-Url: http://dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FMsg.pm;h=00128af622318d2a601de452c5a646de5a7f465d;hb=da2c51a552ec4aba7af7696fa631324337286949;hp=00569928165bb2a630862b4d1fd9603ee05f6d8a;hpb=a204e3cd89e849e97db25879b4ddf62b770bd227;p=spider.git diff --git a/perl/Msg.pm b/perl/Msg.pm index 00569928..00128af6 100644 --- a/perl/Msg.pm +++ b/perl/Msg.pm @@ -5,18 +5,14 @@ # # I have modified it to suit my devious purposes (Dirk Koopman G1TLH) # -# $Id$ +# # package Msg; use strict; -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; +use DXUtil; use IO::Select; use IO::Socket; @@ -42,11 +38,9 @@ BEGIN { 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; } @@ -72,8 +66,8 @@ BEGIN { # defines EINPROGRESS as 10035. We provide it here because some # Win32 users report POSIX::EINPROGRESS is not vendor-supported. if ($^O eq 'MSWin32') { - eval '*EINPROGRESS = sub { 10036 };'; - eval '*EWOULDBLOCK = *EAGAIN = sub { 10035 };'; + eval '*EINPROGRESS = sub { 10036 };' unless defined *EINPROGRESS; + eval '*EWOULDBLOCK = *EAGAIN = sub { 10035 };' unless defined *EWOULDBLOCK; eval '*F_GETFL = sub { 0 };'; eval '*F_SETFL = sub { 0 };'; eval '*IPPROTO_TCP = sub { 6 };'; @@ -139,12 +133,8 @@ sub blocking 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]) { @@ -346,10 +336,10 @@ sub _send { # 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) { @@ -497,10 +487,10 @@ sub _rcv { # Complement to _send return unless defined($sock); my @lines; - if ($conn->{blocking}) { - blocking($sock, 0); - $conn->{blocking} = 0; - } +# if ($conn->{blocking}) { +# blocking($sock, 0); +# $conn->{blocking} = 0; +# } $bytes_read = sysread ($sock, $msg, 1024, 0); if (defined ($bytes_read)) { if ($bytes_read > 0) {