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