zoukankan      html  css  js  c++  java
  • SSL_ERROR_WANT_READ


    ```

    47757 2020/05/07 06:36:04 [debug] 19413#19413: *23421 event timer: 11, old: 15581551413, new: 15581551417
    47758 2020/05/07 06:37:04 [debug] 19413#19413: *23421 http run request: "/ws/base/?tid=3&tkn=e64c5aa4-7534-4f2d-84f9-005bd4498bf2"
    47759 2020/05/07 06:36:04 [debug] 19413#19413: *23421 http upstream process upgraded, fu:0
    47760 2020/05/07 06:36:04 [debug] 19413#19413: *23421 SSL_read: 28
    47761 2020/05/07 06:36:04 [debug] 19413#19413: *23421 SSL_read: -1
    47762 2020/05/07 06:36:04 [debug] 19413#19413: *23421 SSL_get_error: 2
    47763 2020/05/07 06:36:04 [debug] 19413#19413: *23421 send: fd:11 28 of 28
    47764 2020/05/07 06:36:04 [debug] 19413#19413: *23421 event timer: 11, old: 15581551413, new: 15581551625
    47765 2020/05/07 06:36:04 [debug] 19413#19413: *23421 http run request: "/ws/base/?tid=3&tkn=e64c5aa4-7534-4f2d-84f9-005bd4498bf2"
    47766 2020/05/07 06:36:04 [debug] 19413#19413: *23421 http upstream process upgraded, fu:1
    47767 2020/05/07 06:36:04 [debug] 19413#19413: *23421 event timer: 11, old: 15581551413, new: 15581551625
    47768 2020/05/07 06:36:04 [debug] 19413#19413: *23421 http upstream request: "/ws/base/?tid=3&tkn=e64c5aa4-7534-4f2d-84f9-005bd4498bf2"
    47769 2020/05/07 06:36:04 [debug] 19413#19413: *23421 http upstream process upgraded, fu:1
    47770 2020/05/07 06:36:04 [debug] 19413#19413: *23421 recv: eof:0, avail:1
    47771 2020/05/07 06:36:04 [debug] 19413#19413: *23421 recv: fd:11 65 of 4096
    47772 2020/05/07 06:36:04 [debug] 19413#19413: *23421 SSL to write: 65
    47773 2020/05/07 06:36:04 [debug] 19413#19413: *23421 SSL_write: 65
    47774 2020/05/07 06:36:04 [debug] 19413#19413: *23421 event timer: 11, old: 15581551413, new: 15581551625
    47775 2020/05/07 06:36:04 [debug] 19413#19413: *23421 http upstream request: "/ws/base/?tid=3&tkn=e64c5aa4-7534-4f2d-84f9-005bd4498bf2"
    47776 2020/05/07 06:36:04 [debug] 19413#19413: *23421 http upstream process upgraded, fu:0
    47777 2020/05/07 06:36:04 [debug] 19413#19413: *23421 event timer: 11, old: 15581551413, new: 15581551625
    47778 2020/05/07 06:36:04 [debug] 19413#19413: *23421 http run request: "/ws/base/?tid=3&tkn=e64c5aa4-7534-4f2d-84f9-005bd4498bf2"
    47779 2020/05/07 06:36:04 [debug] 19413#19413: *23421 http upstream process upgraded, fu:0
    47780 2020/05/07 06:36:04 [debug] 19413#19413: *23421 SSL_read: 28
    47781 2020/05/07 06:36:04 [debug] 19413#19413: *23421 SSL_read: -1
    47782 2020/05/07 06:36:04 [debug] 19413#19413: *23421 SSL_get_error: 2
    47783 2020/05/07 06:36:04 [debug] 19413#19413: *23421 send: fd:11 28 of 28
    47784 2020/05/07 06:36:04 [debug] 19413#19413: *23421 event timer del: 11: 15581551413
    47785 2020/05/07 06:36:04 [debug] 19413#19413: *23421 event timer add: 11: 60000:15581551957
    47786 2020/05/07 06:36:04 [debug] 19413#19413: *23421 http run request: "/ws/base/?tid=3&tkn=e64c5aa4-7534-4f2d-84f9-005bd4498bf2"
    47787 2020/05/07 06:36:04 [debug] 19413#19413: *23421 http upstream process upgraded, fu:1
    47788 2020/05/07 06:36:04 [debug] 19413#19413: *23421 event timer: 11, old: 15581551957, new: 15581551957
    47789 2020/05/07 06:36:04 [debug] 19413#19413: *23421 http upstream request: "/ws/base/?tid=3&tkn=e64c5aa4-7534-4f2d-84f9-005bd4498bf2"
    47790 2020/05/07 06:36:04 [debug] 19413#19413: *23421 http upstream process upgraded, fu:1
    47791 2020/05/07 06:36:04 [debug] 19413#19413: *23421 recv: eof:0, avail:1
    47792 2020/05/07 06:36:04 [debug] 19413#19413: *23421 recv: fd:11 65 of 4096
    47793 2020/05/07 06:36:04 [debug] 19413#19413: *23421 SSL to write: 65
    47794 2020/05/07 06:36:04 [debug] 19413#19413: *23421 SSL_write: 65
    47795 2020/05/07 06:36:04 [debug] 19413#19413: *23421 event timer: 11, old: 15581551957, new: 15581551957
    47796 2020/05/07 06:36:04 [debug] 19413#19413: *23421 http upstream request: "/ws/base/?tid=3&tkn=e64c5aa4-7534-4f2d-84f9-005bd4498bf2"
    47797 2020/05/07 06:36:04 [debug] 19413#19413: *23421 http upstream process upgraded, fu:0
    47798 2020/05/07 06:36:04 [debug] 19413#19413: *23421 event timer: 11, old: 15581551957, new: 15581551957


    ```

    https://github.com/nginx/nginx/blob/2187586207e1465d289ae64cedc829719a048a39/src/http/ngx_http_upstream.c

    https://github.com/nginx/nginx/blob/4bf4650f2f10f7bbacfe7a33da744f18951d416d/src/core/ngx_log.h


    ```
    #if (NGX_DEBUG)

    #if (NGX_HAVE_VARIADIC_MACROS)

    #define ngx_log_debug0(level, log, err, fmt)
    ngx_log_debug(level, log, err, fmt)

    #define ngx_log_debug1(level, log, err, fmt, arg1)
    ```

    https://github.com/nginx/nginx/blob/fb34316d68511bd0986d3153dfea93d21363016d/src/event/ngx_event_openssl.c

    sslerr = SSL_get_error(c->ssl->connection, n);

    ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "SSL_get_error: %d", sslerr);


    openssl/ssl_lib.c at 35774d5594af9beeb73792742b7ed901d202be70 · openssl/openssl https://github.com/openssl/openssl/blob/35774d5594af9beeb73792742b7ed901d202be70/ssl/ssl_lib.c

    int SSL_get_error(const SSL *s, int i)
    {
    int reason;
    unsigned long l;
    BIO *bio;

    if (i > 0)
    return SSL_ERROR_NONE;

    /*
    * Make things return SSL_ERROR_SYSCALL when doing SSL_do_handshake etc,
    * where we do encode the error
    */
    if ((l = ERR_peek_error()) != 0) {
    if (ERR_GET_LIB(l) == ERR_LIB_SYS)
    return SSL_ERROR_SYSCALL;
    else
    return SSL_ERROR_SSL;
    }

    if (SSL_want_read(s)) {
    bio = SSL_get_rbio(s);
    if (BIO_should_read(bio))
    return SSL_ERROR_WANT_READ;
    else if (BIO_should_write(bio))
    /*
    * This one doesn't make too much sense ... We never try to write
    * to the rbio, and an application program where rbio and wbio
    * are separate couldn't even know what it should wait for.
    * However if we ever set s->rwstate incorrectly (so that we have
    * SSL_want_read(s) instead of SSL_want_write(s)) and rbio and
    * wbio *are* the same, this test works around that bug; so it
    * might be safer to keep it.
    */
    return SSL_ERROR_WANT_WRITE;
    else if (BIO_should_io_special(bio)) {
    reason = BIO_get_retry_reason(bio);
    if (reason == BIO_RR_CONNECT)
    return SSL_ERROR_WANT_CONNECT;
    else if (reason == BIO_RR_ACCEPT)
    return SSL_ERROR_WANT_ACCEPT;
    else
    return SSL_ERROR_SYSCALL; /* unknown */
    }
    }

    if (SSL_want_write(s)) {
    /* Access wbio directly - in order to use the buffered bio if present */
    bio = s->wbio;
    if (BIO_should_write(bio))
    return SSL_ERROR_WANT_WRITE;
    else if (BIO_should_read(bio))
    /*
    * See above (SSL_want_read(s) with BIO_should_write(bio))
    */
    return SSL_ERROR_WANT_READ;
    else if (BIO_should_io_special(bio)) {
    reason = BIO_get_retry_reason(bio);
    if (reason == BIO_RR_CONNECT)
    return SSL_ERROR_WANT_CONNECT;
    else if (reason == BIO_RR_ACCEPT)
    return SSL_ERROR_WANT_ACCEPT;
    else
    return SSL_ERROR_SYSCALL;
    }
    }
    if (SSL_want_x509_lookup(s))
    return SSL_ERROR_WANT_X509_LOOKUP;
    if (SSL_want_async(s))
    return SSL_ERROR_WANT_ASYNC;
    if (SSL_want_async_job(s))
    return SSL_ERROR_WANT_ASYNC_JOB;
    if (SSL_want_client_hello_cb(s))
    return SSL_ERROR_WANT_CLIENT_HELLO_CB;

    if ((s->shutdown & SSL_RECEIVED_SHUTDOWN) &&
    (s->s3.warn_alert == SSL_AD_CLOSE_NOTIFY))
    return SSL_ERROR_ZERO_RETURN;

    return SSL_ERROR_SYSCALL;
    }

    https://github.com/openssl/openssl/blob/e908f292de6383c5d4dbece9381b523d4ce41c69/include/openssl/ssl.h

    ```
    # define SSL_ERROR_NONE 0
    # define SSL_ERROR_SSL 1
    # define SSL_ERROR_WANT_READ 2
    # define SSL_ERROR_WANT_WRITE 3
    # define SSL_ERROR_WANT_X509_LOOKUP 4
    # define SSL_ERROR_SYSCALL 5/* look at error stack/return
    * value/errno */
    # define SSL_ERROR_ZERO_RETURN 6
    # define SSL_ERROR_WANT_CONNECT 7
    # define SSL_ERROR_WANT_ACCEPT 8
    # define SSL_ERROR_WANT_ASYNC 9
    # define SSL_ERROR_WANT_ASYNC_JOB 10
    # define SSL_ERROR_WANT_CLIENT_HELLO_CB 11
    ```

    openssl/bio.h at 852c2ed260860b6b85c84f9fe96fb4d23d49c9f2 · openssl/openssl https://github.com/openssl/openssl/blob/852c2ed260860b6b85c84f9fe96fb4d23d49c9f2/include/openssl/bio.h

    ```
    /* These should be used by the application to tell why we should retry */
    # define BIO_should_read(a) BIO_test_flags(a, BIO_FLAGS_READ)
    # define BIO_should_write(a) BIO_test_flags(a, BIO_FLAGS_WRITE)
    # define BIO_should_io_special(a) BIO_test_flags(a, BIO_FLAGS_IO_SPECIAL)
    # define BIO_retry_type(a) BIO_test_flags(a, BIO_FLAGS_RWS)
    # define BIO_should_retry(a) BIO_test_flags(a, BIO_FLAGS_SHOULD_RETRY)
    ```

    SSL_ERROR_WANT_READ
    Processing was not completed successfully because there was no data available for reading, and the socket available for the SSL session is in nonblocking mode. Try the function again at a later time.

    SSL_get_error https://www.ibm.com/support/knowledgecenter/en/SSB23S_1.1.0.14/gtpc2/cpp_ssl_get_error.html

    ssl
    A pointer to a token returned on the SSL_new call.
    ret
    The return code from the previous SSL API call.

    Normal return

    Returns one of the following values:
    SSL_ERROR_NONE
    No error to report. This is set when the value of the ret parameter is greater than 0.
    SSL_ERROR_SSL
    An error occurred in the SSL library.
    SSL_ERROR_WANT_READ
    Processing was not completed successfully because there was no data available for reading, and the socket available for the SSL session is in nonblocking mode. Try the function again at a later time.
    SSL_ERROR_WANT_WRITE
    Processing was not completed successfully because the socket associated with the SSL session is blocked from sending data. Try the function again at a later time.
    SSL_ERROR_SYSCALL
    An I/O error occurred. Issue the sock_errno function to determine the cause of the error.
    SSL_ERROR_ZERO_RETURN
    The remote application shut down the SSL connection normally. Issue the SSL_shutdown function to shut down data flow for an SSL session.
    SSL_ERROR_WANT_CONNECT
    Processing was not completed successfully because the SSL session was in the process of starting the session, but it has not completed yet. Try the function again at a later time.

    Error return

    None.

    Programming considerations

    • To use this function, you must include the library specified in the prototype in your makefile.
    • If an SSL API call results in an error return code, issue the SSL_get_error function for the following functions to obtain the reason for the error:
      • SSL_accept
      • SSL_connect
      • SSL_read
      • SSL_shutdown
      • SSL_write.
    • Do not use errno or the sock_errno function to determine the cause of an SSL API error. Instead, you must use the SSL_get_error function. However, if you received the SSL_ERROR_SYSCALL return code after issuing the SSL_get_error function, it is appropriate to use the sock_errno function.

     TLS 1.3: SSL_ERROR_WANT_READ after the first SSL_read after handshake, but no more data available · Issue #7327 · openssl/openssl https://github.com/openssl/openssl/issues/7327

     openssl/SSL_get_error.pod at master · openssl/openssl https://github.com/openssl/openssl/blob/master/doc/man3/SSL_get_error.pod

  • 相关阅读:
    C#类型转换
    C#运算符
    SQL视图与触发器
    存储过程
    SQL 变量
    SQL 经典练习题
    字符串函数,数据类型转换,链接查询,纵向查询
    常用的 SQL 函数
    习题整理(1)
    子查询的部分内容
  • 原文地址:https://www.cnblogs.com/rsapaper/p/12854179.html
Copyright © 2011-2022 走看看