|
127 | 127 |
|
128 | 128 | my $TAG = int(rand(10000));
|
129 | 129 | use constant RETRIES => 3;
|
130 |
| -use constant CHANNEL_TIMEOUT => 180; |
| 130 | +# increased to avoid timeout on Blue Waters during quiesce events |
| 131 | +use constant CHANNEL_TIMEOUT => 300; |
131 | 132 | use constant HEARTBEAT_INTERVAL => 60;
|
132 | 133 | use constant MAXFRAGS => 16;
|
133 | 134 | # TODO: Make this configurable (#537)
|
@@ -570,14 +571,23 @@ sub sockSend {
|
570 | 571 | my ($buf) = @_;
|
571 | 572 |
|
572 | 573 | my $start = time();
|
573 |
| - my $r = $SOCK->send($buf, 0); |
574 |
| - my $err = $!; |
| 574 | + my $r; |
| 575 | + my $err; |
| 576 | + eval { |
| 577 | + $r = $SOCK->send($buf, 0); |
| 578 | + $err = $!; # possibly EPIPE |
| 579 | + }; |
| 580 | + if ($@) { |
| 581 | + $err = $@; |
| 582 | + wlog(DEBUG, "Caught send error: $err\n"); |
| 583 | + } |
575 | 584 | if (!defined $r) {
|
576 | 585 | if ($err == POSIX::EWOULDBLOCK) {
|
577 | 586 | wlog(TRACE, "Send would block\n");
|
578 | 587 | $r = 0;
|
579 | 588 | }
|
580 |
| - elsif ($err == POSIX::EPIPE) { |
| 589 | + elsif (($err == POSIX::EPIPE) || (index($err, "send: Cannot determine peer address") != -1)) { |
| 590 | + initiateReconnect(); |
581 | 591 | wlog(INFO, "Broken pipe; trying to re-connect\n");
|
582 | 592 | $CONNECTED = 0;
|
583 | 593 | reconnect();
|
@@ -738,7 +748,7 @@ sub nextFileData {
|
738 | 748 | }
|
739 | 749 | elsif ($s == PUT_CMD_SENT) {
|
740 | 750 | $$state{"state"} = $s + 1;
|
741 |
| - return (0, pack("VV", $$state{"size"}, 0), CONTINUE); |
| 751 | + return (0, pack("VV", $$state{"size"} & 0xffffffff, $$state{"size"} >> 32), CONTINUE); |
742 | 752 | }
|
743 | 753 | elsif ($s == PUT_SIZE_SENT) {
|
744 | 754 | $$state{"state"} = $s + 1;
|
|
0 commit comments