Overview
Comment: | Added support for detecting writes after we have told the channel that we are in EOF and start returning errors in that case |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | bug-eof-loop-6dd5588df6 |
Files: | files | file ages | folders |
SHA1: |
7e5e4e2114e310cebe61a167ded65fa2 |
User & Date: | rkeene on 2017-09-21 14:15:20 |
Other Links: | branch diff | manifest | tags |
Context
2017-09-21
| ||
16:07 | More soft-EOF mappings Leaf check-in: d63ee30cb2 user: rkeene tags: bug-eof-loop-6dd5588df6 | |
14:15 | Added support for detecting writes after we have told the channel that we are in EOF and start returning errors in that case check-in: 7e5e4e2114 user: rkeene tags: bug-eof-loop-6dd5588df6 | |
2017-09-01
| ||
00:16 | Try harder to ensure the right SSL libraries are used check-in: 6704c33e48 user: rkeene tags: trunk | |
Changes
Modified tlsIO.c
from [f8a8e7a642]
to [1ceb846355].
︙ | ︙ | |||
514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 | if (statePtr->flags & TLS_TCL_CALLBACK) { dprintf("Don't process output while callbacks are running") written = -1; *errorCodePtr = EAGAIN; return(-1); } dprintf("Calling Tls_WaitForConnect"); tlsConnect = Tls_WaitForConnect(statePtr, errorCodePtr, 1); if (tlsConnect < 0) { dprintf("Got an error waiting to connect (tlsConnect = %i, *errorCodePtr = %i)", tlsConnect, *errorCodePtr); written = -1; if (*errorCodePtr == ECONNRESET) { | > > > > > > > | > | 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 | if (statePtr->flags & TLS_TCL_CALLBACK) { dprintf("Don't process output while callbacks are running") written = -1; *errorCodePtr = EAGAIN; return(-1); } if (statePtr->flags & TLS_TCL_EOF) { dprintf("Asked to write after reaching EOF, we are treating this as fatal."); written = -1; *errorCodePtr = ECONNRESET; return(written); } dprintf("Calling Tls_WaitForConnect"); tlsConnect = Tls_WaitForConnect(statePtr, errorCodePtr, 1); if (tlsConnect < 0) { dprintf("Got an error waiting to connect (tlsConnect = %i, *errorCodePtr = %i)", tlsConnect, *errorCodePtr); written = -1; if (*errorCodePtr == ECONNRESET) { dprintf("Got connection reset (setting EOF flag)"); /* Soft EOF */ *errorCodePtr = 0; written = 0; statePtr->flags |= TLS_TCL_EOF; } return(written); } if (toWrite == 0) { dprintf("zero-write"); |
︙ | ︙ | |||
582 583 584 585 586 587 588 | case SSL_ERROR_WANT_READ: dprintf(" write R BLOCK"); break; case SSL_ERROR_WANT_X509_LOOKUP: dprintf(" write X BLOCK"); break; case SSL_ERROR_ZERO_RETURN: | | | 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 | case SSL_ERROR_WANT_READ: dprintf(" write R BLOCK"); break; case SSL_ERROR_WANT_X509_LOOKUP: dprintf(" write X BLOCK"); break; case SSL_ERROR_ZERO_RETURN: dprintf(" closed (EOF reached)"); written = 0; *errorCodePtr = 0; break; case SSL_ERROR_SYSCALL: backingError = ERR_get_error(); if (backingError == 0 && written == 0) { |
︙ | ︙ | |||
613 614 615 616 617 618 619 620 621 622 623 624 625 626 | *errorCodePtr = ECONNABORTED; written = -1; break; default: dprintf(" unknown err: %d", err); break; } dprintf("Output(%d) -> %d", toWrite, written); return(written); } /* *------------------------------------------------------------------- | > > > > > | 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 | *errorCodePtr = ECONNABORTED; written = -1; break; default: dprintf(" unknown err: %d", err); break; } if (toWrite != 0 && written == 0 && *errorCodePtr == 0) { dprintf("Detected EOF, setting the EOF flag"); statePtr->flags |= TLS_TCL_EOF; } dprintf("Output(%d) -> %d", toWrite, written); return(written); } /* *------------------------------------------------------------------- |
︙ | ︙ |
Modified tlsInt.h
from [b78d815874]
to [0876b611aa].
︙ | ︙ | |||
122 123 124 125 126 127 128 129 130 131 132 133 134 135 | #define TLS_TCL_DEBUG (1<<3) /* Show debug tracing */ #define TLS_TCL_CALLBACK (1<<4) /* In a callback, prevent update * looping problem. [Bug 1652380] */ #define TLS_TCL_HANDSHAKE_FAILED (1<<5) /* Set on handshake failures and once * set, all further I/O will result * in ECONNABORTED errors. */ #define TLS_TCL_FASTPATH (1<<6) /* The parent channel is being used directly by the SSL library */ #define TLS_TCL_DELAY (5) /* * This structure describes the per-instance state * of an ssl channel. * * The SSL processing context is maintained here, in the ClientData | > | 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 | #define TLS_TCL_DEBUG (1<<3) /* Show debug tracing */ #define TLS_TCL_CALLBACK (1<<4) /* In a callback, prevent update * looping problem. [Bug 1652380] */ #define TLS_TCL_HANDSHAKE_FAILED (1<<5) /* Set on handshake failures and once * set, all further I/O will result * in ECONNABORTED errors. */ #define TLS_TCL_FASTPATH (1<<6) /* The parent channel is being used directly by the SSL library */ #define TLS_TCL_EOF (1<<7) /* We initiated EOF, any further attempts to write will return an error */ #define TLS_TCL_DELAY (5) /* * This structure describes the per-instance state * of an ssl channel. * * The SSL processing context is maintained here, in the ClientData |
︙ | ︙ |