Mercurial > hg > nginx
comparison src/event/ngx_event_openssl.c @ 8568:0875101c08f7 quic
Merged with the default branch.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Thu, 01 Oct 2020 12:21:11 +0100 |
parents | 532fe796b0e2 052ecc68d350 |
children | 7621ffaa79b3 |
comparison
equal
deleted
inserted
replaced
8567:4983357258d7 | 8568:0875101c08f7 |
---|---|
2571 return n; | 2571 return n; |
2572 } | 2572 } |
2573 | 2573 |
2574 sslerr = SSL_get_error(c->ssl->connection, n); | 2574 sslerr = SSL_get_error(c->ssl->connection, n); |
2575 | 2575 |
2576 if (sslerr == SSL_ERROR_ZERO_RETURN) { | |
2577 | |
2578 /* | |
2579 * OpenSSL 1.1.1 fails to return SSL_ERROR_SYSCALL if an error | |
2580 * happens during SSL_write() after close_notify alert from the | |
2581 * peer, and returns SSL_ERROR_ZERO_RETURN instead, | |
2582 * https://git.openssl.org/?p=openssl.git;a=commitdiff;h=8051ab2 | |
2583 */ | |
2584 | |
2585 sslerr = SSL_ERROR_SYSCALL; | |
2586 } | |
2587 | |
2576 err = (sslerr == SSL_ERROR_SYSCALL) ? ngx_errno : 0; | 2588 err = (sslerr == SSL_ERROR_SYSCALL) ? ngx_errno : 0; |
2577 | 2589 |
2578 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "SSL_get_error: %d", sslerr); | 2590 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "SSL_get_error: %d", sslerr); |
2579 | 2591 |
2580 if (sslerr == SSL_ERROR_WANT_WRITE) { | 2592 if (sslerr == SSL_ERROR_WANT_WRITE) { |
2798 c->ssl = NULL; | 2810 c->ssl = NULL; |
2799 | 2811 |
2800 return NGX_OK; | 2812 return NGX_OK; |
2801 } | 2813 } |
2802 | 2814 |
2803 if (c->timedout) { | 2815 if (c->timedout || c->error || c->buffered) { |
2804 mode = SSL_RECEIVED_SHUTDOWN|SSL_SENT_SHUTDOWN; | 2816 mode = SSL_RECEIVED_SHUTDOWN|SSL_SENT_SHUTDOWN; |
2805 SSL_set_quiet_shutdown(c->ssl->connection, 1); | 2817 SSL_set_quiet_shutdown(c->ssl->connection, 1); |
2806 | 2818 |
2807 } else { | 2819 } else { |
2808 mode = SSL_get_shutdown(c->ssl->connection); | 2820 mode = SSL_get_shutdown(c->ssl->connection); |
2857 "SSL_get_error: %d", sslerr); | 2869 "SSL_get_error: %d", sslerr); |
2858 | 2870 |
2859 if (sslerr == SSL_ERROR_WANT_READ || sslerr == SSL_ERROR_WANT_WRITE) { | 2871 if (sslerr == SSL_ERROR_WANT_READ || sslerr == SSL_ERROR_WANT_WRITE) { |
2860 c->read->handler = ngx_ssl_shutdown_handler; | 2872 c->read->handler = ngx_ssl_shutdown_handler; |
2861 c->write->handler = ngx_ssl_shutdown_handler; | 2873 c->write->handler = ngx_ssl_shutdown_handler; |
2874 | |
2875 if (sslerr == SSL_ERROR_WANT_READ) { | |
2876 c->read->ready = 0; | |
2877 | |
2878 } else { | |
2879 c->write->ready = 0; | |
2880 } | |
2862 | 2881 |
2863 if (ngx_handle_read_event(c->read, 0) != NGX_OK) { | 2882 if (ngx_handle_read_event(c->read, 0) != NGX_OK) { |
2864 return NGX_ERROR; | 2883 return NGX_ERROR; |
2865 } | 2884 } |
2866 | 2885 |