Mercurial > hg > nginx-quic
comparison src/event/ngx_event_openssl.c @ 8777:f1fcb0fe6975
SSL: SSL_sendfile(SF_NODISKIO) support.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Mon, 27 Dec 2021 19:48:42 +0300 |
parents | 3443c02ca1d1 |
children | b002ad258f1d |
comparison
equal
deleted
inserted
replaced
8776:ec2e6893caaa | 8777:f1fcb0fe6975 |
---|---|
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 flags = (c->busy_count <= 2) ? SF_NODISKIO : 0; | |
2959 #else | |
2960 flags = 0; | |
2961 #endif | |
2962 | |
2957 n = SSL_sendfile(c->ssl->connection, file->file->fd, file->file_pos, | 2963 n = SSL_sendfile(c->ssl->connection, file->file->fd, file->file_pos, |
2958 size, 0); | 2964 size, flags); |
2959 | 2965 |
2960 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "SSL_sendfile: %d", n); | 2966 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "SSL_sendfile: %d", n); |
2961 | 2967 |
2962 if (n > 0) { | 2968 if (n > 0) { |
2963 | 2969 |
2971 return NGX_ERROR; | 2977 return NGX_ERROR; |
2972 } | 2978 } |
2973 | 2979 |
2974 ngx_post_event(c->read, &ngx_posted_events); | 2980 ngx_post_event(c->read, &ngx_posted_events); |
2975 } | 2981 } |
2982 | |
2983 #if (NGX_HAVE_SENDFILE_NODISKIO) | |
2984 c->busy_count = 0; | |
2985 #endif | |
2976 | 2986 |
2977 c->sent += n; | 2987 c->sent += n; |
2978 | 2988 |
2979 return n; | 2989 return n; |
2980 } | 2990 } |
3035 return NGX_ERROR; | 3045 return NGX_ERROR; |
3036 } | 3046 } |
3037 | 3047 |
3038 ngx_post_event(c->read, &ngx_posted_events); | 3048 ngx_post_event(c->read, &ngx_posted_events); |
3039 } | 3049 } |
3050 | |
3051 #if (NGX_HAVE_SENDFILE_NODISKIO) | |
3052 | |
3053 if (ngx_errno == EBUSY) { | |
3054 c->busy_count++; | |
3055 | |
3056 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, | |
3057 "SSL_sendfile() busy, count:%d", c->busy_count); | |
3058 | |
3059 if (c->write->posted) { | |
3060 ngx_delete_posted_event(c->write); | |
3061 } | |
3062 | |
3063 ngx_post_event(c->write, &ngx_posted_next_events); | |
3064 } | |
3065 | |
3066 #endif | |
3040 | 3067 |
3041 c->write->ready = 0; | 3068 c->write->ready = 0; |
3042 return NGX_AGAIN; | 3069 return NGX_AGAIN; |
3043 } | 3070 } |
3044 | 3071 |