put POSIX block check back in, try to deal with M$ lack of EWOULDBLOCK and
authorminima <minima>
Sat, 17 Mar 2001 13:25:39 +0000 (13:25 +0000)
committerminima <minima>
Sat, 17 Mar 2001 13:25:39 +0000 (13:25 +0000)
EINPROGRESS

Changes
perl/DXProtout.pm
perl/Msg.pm

diff --git a/Changes b/Changes
index 2ccd8b4e0b1a3a3e7347c9671630d154a2186427..4b38e95588714dbb340ffbaf63ef7168ac4fe118 100644 (file)
--- a/Changes
+++ b/Changes
@@ -1,3 +1,6 @@
+17Mar01=======================================================================
+1. put block check back in, try a work around for EWOULDBLOCK/EINPROGRESS
+for M$. 
 16Mar01=======================================================================
 1. integrate build number into main cluster and change the PC18 to show 
 version and build in the text portion
index 86ab0e86562269b4dfe47b8317a7b646fb432a31..6ee4fbcc150272d2465a4d26f3e2e28ea2c68fdf 100644 (file)
@@ -102,7 +102,7 @@ sub pc17
 # Request init string
 sub pc18
 {
-       return "PC18^DXSpider Version $main::version Build $main::build^$DXProt::myprot_version^";
+       return "PC18^DXSpider Version: $main::version Build: $main::build^$DXProt::myprot_version^";
 }
 
 #
index 839b5e453313e05db16f6f536ba26d3e4b1cdd31..b7be27d3e272ebc3bb780dffef736206b11ee46e 100644 (file)
@@ -28,6 +28,22 @@ $wt_handles   = IO::Select->new();
 $er_handles   = IO::Select->new();
 
 $now = time;
+my $blocking_supported = 0;
+
+BEGIN {
+    # Checks if blocking is supported
+    eval {
+        require POSIX; POSIX->import(qw (F_SETFL O_NONBLOCK));
+    };
+    $blocking_supported = 1 unless $@;
+}
+
+my $w = $^W;
+$^W = 0;
+my $eagain = eval {EAGAIN()};
+my $einprogress = eval {EINPROGRESS()};
+my $ewouldblock = eval {EWOULDBLOCK()};
+$^W = $w;
 
 #
 #-----------------------------------------------------------------
@@ -71,6 +87,8 @@ sub set_rproc
 
 sub blocking
 {
+       return unless $blocking_supported;
+       
        my $flags = fcntl ($_[0], F_GETFL, 0);
        if ($_[1]) {
                $flags &= ~O_NONBLOCK;
@@ -137,9 +155,7 @@ sub connect {
        my $ip = gethostbyname($to_host);
 #      my $r = $sock->connect($to_port, $ip);
        my $r = connect($sock, pack_sockaddr_in($to_port, $ip));
-       unless ($r) {
-               return undef unless $! == EINPROGRESS;
-       }
+       return undef unless $r || _err_will_block($r);
        
        $conn->{sock} = $sock;
     
@@ -265,7 +281,8 @@ sub _send {
 }
 
 sub _err_will_block {
-       return ($_[0] == EAGAIN || $_[0] == EWOULDBLOCK || $_[0] == EINPROGRESS);
+       return 0 unless $blocking_supported;
+       return ($_[0] == $eagain || $_[0] == $ewouldblock || $_[0] == $einprogress);
 }
 
 sub close_on_empty