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