+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
$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;
#
#-----------------------------------------------------------------
sub blocking
{
+ return unless $blocking_supported;
+
my $flags = fcntl ($_[0], F_GETFL, 0);
if ($_[1]) {
$flags &= ~O_NONBLOCK;
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;
}
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