comparison src/event/ngx_event_openssl.c @ 8956:eaf356a35f5d quic

Merged with the default branch.
author Sergey Kandaurov <pluknet@nginx.com>
date Wed, 29 Dec 2021 15:17:26 +0300
parents 5c86189a1c1b b002ad258f1d
children 7c2adf237091
comparison
equal deleted inserted replaced
8955:32daba3aabb2 8956:eaf356a35f5d
2940 static ssize_t 2940 static ssize_t
2941 ngx_ssl_sendfile(ngx_connection_t *c, ngx_buf_t *file, size_t size) 2941 ngx_ssl_sendfile(ngx_connection_t *c, ngx_buf_t *file, size_t size)
2942 { 2942 {
2943 #ifdef BIO_get_ktls_send 2943 #ifdef BIO_get_ktls_send
2944 2944
2945 int sslerr; 2945 int sslerr, flags;
2946 ssize_t n; 2946 ssize_t n;
2947 ngx_err_t err; 2947 ngx_err_t err;
2948 2948
2949 ngx_ssl_clear_error(c->log); 2949 ngx_ssl_clear_error(c->log);
2950 2950
2952 "SSL to sendfile: @%O %uz", 2952 "SSL to sendfile: @%O %uz",
2953 file->file_pos, size); 2953 file->file_pos, size);
2954 2954
2955 ngx_set_errno(0); 2955 ngx_set_errno(0);
2956 2956
2957 #if (NGX_HAVE_SENDFILE_NODISKIO)
2958
2959 flags = (c->busy_count <= 2) ? SF_NODISKIO : 0;
2960
2961 if (file->file->directio) {
2962 flags |= SF_NOCACHE;
2963 }
2964
2965 #else
2966 flags = 0;
2967 #endif
2968
2957 n = SSL_sendfile(c->ssl->connection, file->file->fd, file->file_pos, 2969 n = SSL_sendfile(c->ssl->connection, file->file->fd, file->file_pos,
2958 size, 0); 2970 size, flags);
2959 2971
2960 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "SSL_sendfile: %d", n); 2972 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "SSL_sendfile: %d", n);
2961 2973
2962 if (n > 0) { 2974 if (n > 0) {
2963 2975
2971 return NGX_ERROR; 2983 return NGX_ERROR;
2972 } 2984 }
2973 2985
2974 ngx_post_event(c->read, &ngx_posted_events); 2986 ngx_post_event(c->read, &ngx_posted_events);
2975 } 2987 }
2988
2989 #if (NGX_HAVE_SENDFILE_NODISKIO)
2990 c->busy_count = 0;
2991 #endif
2976 2992
2977 c->sent += n; 2993 c->sent += n;
2978 2994
2979 return n; 2995 return n;
2980 } 2996 }
3035 return NGX_ERROR; 3051 return NGX_ERROR;
3036 } 3052 }
3037 3053
3038 ngx_post_event(c->read, &ngx_posted_events); 3054 ngx_post_event(c->read, &ngx_posted_events);
3039 } 3055 }
3056
3057 #if (NGX_HAVE_SENDFILE_NODISKIO)
3058
3059 if (ngx_errno == EBUSY) {
3060 c->busy_count++;
3061
3062 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0,
3063 "SSL_sendfile() busy, count:%d", c->busy_count);
3064
3065 if (c->write->posted) {
3066 ngx_delete_posted_event(c->write);
3067 }
3068
3069 ngx_post_event(c->write, &ngx_posted_next_events);
3070 }
3071
3072 #endif
3040 3073
3041 c->write->ready = 0; 3074 c->write->ready = 0;
3042 return NGX_AGAIN; 3075 return NGX_AGAIN;
3043 } 3076 }
3044 3077