defect 3183: check the socket sending result so that do the retry for sending failed
This commit is contained in:
parent
6f8f7c3f52
commit
0e8eb99410
@ -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));
|
||||
}
|
||||
};
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user