defect 3183: check the socket sending result so that do the retry for sending failed

This commit is contained in:
daniceexi 2013-10-09 08:55:31 -04:00
parent 6f8f7c3f52
commit 0e8eb99410

View File

@ -876,6 +876,9 @@ until ($quit) {
next; #just keep pulling things off listen queue onto our own
}
my $cnnection=shift @pendingconnections;
my $previous = select ($cnnection); #assure that perl buffering is not in play at the low level
$|=1;
select ($previous);
my $connection;
my $child = xCAT::Utils->xfork(); #Yes we fork, IO::Socket::SSL is not threadsafe..
if ($child) {
@ -912,6 +915,9 @@ until ($quit) {
unless ($connection) {
xexit 0;
}
$previous=select($connection); #also assure buffering not in play at SSL socket, which seems to be possibly independent of lower socket
$|=1;
select($previous);
$clientselect->add($connection);
my $peerhost=undef;
my $peerfqdn=undef;
@ -1733,6 +1739,7 @@ sub service_connection {
do { $bytesread=sysread($sock,$line,65536,length($line)) } while ($bytesread);
if (length($line)==0) {
if (not defined $bytesread and $! == EAGAIN) { next; } #
if (not defined $bytesread and ($! == EAGAIN or $! == ECHILD)) { next; } # ECHILD makes no sense, but some platform does it
last;
}
$flags=fcntl($sock,F_GETFL,0);
@ -1885,7 +1892,9 @@ sub send_pending_responses {
$blocks += 1;
}
foreach (0..$blocks) {
do {
syswrite($sock,$resp,4096,$_*4096);
} while (($! == EAGAIN) or ($! == ECHILD));
}
};
}