1e71b7053SJung-uk Kim=pod 2e71b7053SJung-uk Kim 3e71b7053SJung-uk Kim=head1 NAME 4e71b7053SJung-uk Kim 5e71b7053SJung-uk KimSSL_get_error - obtain result code for TLS/SSL I/O operation 6e71b7053SJung-uk Kim 7e71b7053SJung-uk Kim=head1 SYNOPSIS 8e71b7053SJung-uk Kim 9e71b7053SJung-uk Kim #include <openssl/ssl.h> 10e71b7053SJung-uk Kim 11e71b7053SJung-uk Kim int SSL_get_error(const SSL *ssl, int ret); 12e71b7053SJung-uk Kim 13e71b7053SJung-uk Kim=head1 DESCRIPTION 14e71b7053SJung-uk Kim 15e71b7053SJung-uk KimSSL_get_error() returns a result code (suitable for the C "switch" 16e71b7053SJung-uk Kimstatement) for a preceding call to SSL_connect(), SSL_accept(), SSL_do_handshake(), 17e71b7053SJung-uk KimSSL_read_ex(), SSL_read(), SSL_peek_ex(), SSL_peek(), SSL_write_ex() or 18e71b7053SJung-uk KimSSL_write() on B<ssl>. The value returned by that TLS/SSL I/O function must be 19e71b7053SJung-uk Kimpassed to SSL_get_error() in parameter B<ret>. 20e71b7053SJung-uk Kim 21e71b7053SJung-uk KimIn addition to B<ssl> and B<ret>, SSL_get_error() inspects the 22e71b7053SJung-uk Kimcurrent thread's OpenSSL error queue. Thus, SSL_get_error() must be 23e71b7053SJung-uk Kimused in the same thread that performed the TLS/SSL I/O operation, and no 24e71b7053SJung-uk Kimother OpenSSL function calls should appear in between. The current 25e71b7053SJung-uk Kimthread's error queue must be empty before the TLS/SSL I/O operation is 26e71b7053SJung-uk Kimattempted, or SSL_get_error() will not work reliably. 27e71b7053SJung-uk Kim 28e71b7053SJung-uk Kim=head1 RETURN VALUES 29e71b7053SJung-uk Kim 30e71b7053SJung-uk KimThe following return values can currently occur: 31e71b7053SJung-uk Kim 32e71b7053SJung-uk Kim=over 4 33e71b7053SJung-uk Kim 34e71b7053SJung-uk Kim=item SSL_ERROR_NONE 35e71b7053SJung-uk Kim 36e71b7053SJung-uk KimThe TLS/SSL I/O operation completed. This result code is returned 37e71b7053SJung-uk Kimif and only if B<ret E<gt> 0>. 38e71b7053SJung-uk Kim 39e71b7053SJung-uk Kim=item SSL_ERROR_ZERO_RETURN 40e71b7053SJung-uk Kim 41e71b7053SJung-uk KimThe TLS/SSL peer has closed the connection for writing by sending the 42*c9cf7b5cSJung-uk Kimclose_notify alert. 43e71b7053SJung-uk KimNo more data can be read. 44e71b7053SJung-uk KimNote that B<SSL_ERROR_ZERO_RETURN> does not necessarily 45e71b7053SJung-uk Kimindicate that the underlying transport has been closed. 46e71b7053SJung-uk Kim 47e71b7053SJung-uk Kim=item SSL_ERROR_WANT_READ, SSL_ERROR_WANT_WRITE 48e71b7053SJung-uk Kim 49e71b7053SJung-uk KimThe operation did not complete and can be retried later. 50e71b7053SJung-uk Kim 51e71b7053SJung-uk KimB<SSL_ERROR_WANT_READ> is returned when the last operation was a read 52e71b7053SJung-uk Kimoperation from a non-blocking B<BIO>. 53e71b7053SJung-uk KimIt means that not enough data was available at this time to complete the 54e71b7053SJung-uk Kimoperation. 55e71b7053SJung-uk KimIf at a later time the underlying B<BIO> has data available for reading the same 56e71b7053SJung-uk Kimfunction can be called again. 57e71b7053SJung-uk Kim 58e71b7053SJung-uk KimSSL_read() and SSL_read_ex() can also set B<SSL_ERROR_WANT_READ> when there is 59e71b7053SJung-uk Kimstill unprocessed data available at either the B<SSL> or the B<BIO> layer, even 60e71b7053SJung-uk Kimfor a blocking B<BIO>. 61e71b7053SJung-uk KimSee L<SSL_read(3)> for more information. 62e71b7053SJung-uk Kim 63e71b7053SJung-uk KimB<SSL_ERROR_WANT_WRITE> is returned when the last operation was a write 64e71b7053SJung-uk Kimto a non-blocking B<BIO> and it was unable to sent all data to the B<BIO>. 65e71b7053SJung-uk KimWhen the B<BIO> is writeable again, the same function can be called again. 66e71b7053SJung-uk Kim 67e71b7053SJung-uk KimNote that the retry may again lead to an B<SSL_ERROR_WANT_READ> or 68e71b7053SJung-uk KimB<SSL_ERROR_WANT_WRITE> condition. 69e71b7053SJung-uk KimThere is no fixed upper limit for the number of iterations that 70e71b7053SJung-uk Kimmay be necessary until progress becomes visible at application 71e71b7053SJung-uk Kimprotocol level. 72e71b7053SJung-uk Kim 73e71b7053SJung-uk KimIt is safe to call SSL_read() or SSL_read_ex() when more data is available 74e71b7053SJung-uk Kimeven when the call that set this error was an SSL_write() or SSL_write_ex(). 75e71b7053SJung-uk KimHowever if the call was an SSL_write() or SSL_write_ex(), it should be called 76e71b7053SJung-uk Kimagain to continue sending the application data. 77e71b7053SJung-uk Kim 78e71b7053SJung-uk KimFor socket B<BIO>s (e.g. when SSL_set_fd() was used), select() or 79e71b7053SJung-uk Kimpoll() on the underlying socket can be used to find out when the 80e71b7053SJung-uk KimTLS/SSL I/O function should be retried. 81e71b7053SJung-uk Kim 82e71b7053SJung-uk KimCaveat: Any TLS/SSL I/O function can lead to either of 83e71b7053SJung-uk KimB<SSL_ERROR_WANT_READ> and B<SSL_ERROR_WANT_WRITE>. 84e71b7053SJung-uk KimIn particular, 85e71b7053SJung-uk KimSSL_read_ex(), SSL_read(), SSL_peek_ex(), or SSL_peek() may want to write data 86e71b7053SJung-uk Kimand SSL_write() or SSL_write_ex() may want to read data. 87e71b7053SJung-uk KimThis is mainly because 88e71b7053SJung-uk KimTLS/SSL handshakes may occur at any time during the protocol (initiated by 89e71b7053SJung-uk Kimeither the client or the server); SSL_read_ex(), SSL_read(), SSL_peek_ex(), 90e71b7053SJung-uk KimSSL_peek(), SSL_write_ex(), and SSL_write() will handle any pending handshakes. 91e71b7053SJung-uk Kim 92e71b7053SJung-uk Kim=item SSL_ERROR_WANT_CONNECT, SSL_ERROR_WANT_ACCEPT 93e71b7053SJung-uk Kim 94e71b7053SJung-uk KimThe operation did not complete; the same TLS/SSL I/O function should be 95e71b7053SJung-uk Kimcalled again later. The underlying BIO was not connected yet to the peer 96e71b7053SJung-uk Kimand the call would block in connect()/accept(). The SSL function should be 97e71b7053SJung-uk Kimcalled again when the connection is established. These messages can only 98e71b7053SJung-uk Kimappear with a BIO_s_connect() or BIO_s_accept() BIO, respectively. 99e71b7053SJung-uk KimIn order to find out, when the connection has been successfully established, 100e71b7053SJung-uk Kimon many platforms select() or poll() for writing on the socket file descriptor 101e71b7053SJung-uk Kimcan be used. 102e71b7053SJung-uk Kim 103e71b7053SJung-uk Kim=item SSL_ERROR_WANT_X509_LOOKUP 104e71b7053SJung-uk Kim 105e71b7053SJung-uk KimThe operation did not complete because an application callback set by 106e71b7053SJung-uk KimSSL_CTX_set_client_cert_cb() has asked to be called again. 107e71b7053SJung-uk KimThe TLS/SSL I/O function should be called again later. 108e71b7053SJung-uk KimDetails depend on the application. 109e71b7053SJung-uk Kim 110e71b7053SJung-uk Kim=item SSL_ERROR_WANT_ASYNC 111e71b7053SJung-uk Kim 112e71b7053SJung-uk KimThe operation did not complete because an asynchronous engine is still 113e71b7053SJung-uk Kimprocessing data. This will only occur if the mode has been set to SSL_MODE_ASYNC 114e71b7053SJung-uk Kimusing L<SSL_CTX_set_mode(3)> or L<SSL_set_mode(3)> and an asynchronous capable 115e71b7053SJung-uk Kimengine is being used. An application can determine whether the engine has 116e71b7053SJung-uk Kimcompleted its processing using select() or poll() on the asynchronous wait file 117e71b7053SJung-uk Kimdescriptor. This file descriptor is available by calling 118e71b7053SJung-uk KimL<SSL_get_all_async_fds(3)> or L<SSL_get_changed_async_fds(3)>. The TLS/SSL I/O 119e71b7053SJung-uk Kimfunction should be called again later. The function B<must> be called from the 120e71b7053SJung-uk Kimsame thread that the original call was made from. 121e71b7053SJung-uk Kim 122e71b7053SJung-uk Kim=item SSL_ERROR_WANT_ASYNC_JOB 123e71b7053SJung-uk Kim 124e71b7053SJung-uk KimThe asynchronous job could not be started because there were no async jobs 125e71b7053SJung-uk Kimavailable in the pool (see ASYNC_init_thread(3)). This will only occur if the 126e71b7053SJung-uk Kimmode has been set to SSL_MODE_ASYNC using L<SSL_CTX_set_mode(3)> or 127e71b7053SJung-uk KimL<SSL_set_mode(3)> and a maximum limit has been set on the async job pool 128e71b7053SJung-uk Kimthrough a call to L<ASYNC_init_thread(3)>. The application should retry the 129e71b7053SJung-uk Kimoperation after a currently executing asynchronous operation for the current 130e71b7053SJung-uk Kimthread has completed. 131e71b7053SJung-uk Kim 132e71b7053SJung-uk Kim=item SSL_ERROR_WANT_CLIENT_HELLO_CB 133e71b7053SJung-uk Kim 134e71b7053SJung-uk KimThe operation did not complete because an application callback set by 135e71b7053SJung-uk KimSSL_CTX_set_client_hello_cb() has asked to be called again. 136e71b7053SJung-uk KimThe TLS/SSL I/O function should be called again later. 137e71b7053SJung-uk KimDetails depend on the application. 138e71b7053SJung-uk Kim 139e71b7053SJung-uk Kim=item SSL_ERROR_SYSCALL 140e71b7053SJung-uk Kim 141e71b7053SJung-uk KimSome non-recoverable I/O error occurred. 142e71b7053SJung-uk KimThe OpenSSL error queue may contain more information on the error. 143e71b7053SJung-uk KimFor socket I/O on Unix systems, consult B<errno> for details. 144e71b7053SJung-uk Kim 145e71b7053SJung-uk KimThis value can also be returned for other errors, check the error queue for 146e71b7053SJung-uk Kimdetails. 147e71b7053SJung-uk Kim 148e71b7053SJung-uk Kim=item SSL_ERROR_SSL 149e71b7053SJung-uk Kim 150e71b7053SJung-uk KimA failure in the SSL library occurred, usually a protocol error. The 151e71b7053SJung-uk KimOpenSSL error queue contains more information on the error. 152e71b7053SJung-uk Kim 153e71b7053SJung-uk Kim=back 154e71b7053SJung-uk Kim 155e71b7053SJung-uk Kim=head1 SEE ALSO 156e71b7053SJung-uk Kim 157e71b7053SJung-uk KimL<ssl(7)> 158e71b7053SJung-uk Kim 159e71b7053SJung-uk Kim=head1 HISTORY 160e71b7053SJung-uk Kim 161e71b7053SJung-uk KimSSL_ERROR_WANT_ASYNC was added in OpenSSL 1.1.0. 162e71b7053SJung-uk KimSSL_ERROR_WANT_CLIENT_HELLO_CB was added in OpenSSL 1.1.1. 163e71b7053SJung-uk Kim 164e71b7053SJung-uk Kim=head1 COPYRIGHT 165e71b7053SJung-uk Kim 166e71b7053SJung-uk KimCopyright 2000-2018 The OpenSSL Project Authors. All Rights Reserved. 167e71b7053SJung-uk Kim 168e71b7053SJung-uk KimLicensed under the OpenSSL license (the "License"). You may not use 169e71b7053SJung-uk Kimthis file except in compliance with the License. You can obtain a copy 170e71b7053SJung-uk Kimin the file LICENSE in the source distribution or at 171e71b7053SJung-uk KimL<https://www.openssl.org/source/license.html>. 172e71b7053SJung-uk Kim 173e71b7053SJung-uk Kim=cut 174