Fix grammar in srp_verifier.txt
[openssl.git] / doc / man3 / SSL_get_error.pod
1 =pod
2
3 =head1 NAME
4
5 SSL_get_error - obtain result code for TLS/SSL I/O operation
6
7 =head1 SYNOPSIS
8
9  #include <openssl/ssl.h>
10
11  int SSL_get_error(const SSL *ssl, int ret);
12
13 =head1 DESCRIPTION
14
15 SSL_get_error() returns a result code (suitable for the C "switch"
16 statement) for a preceding call to SSL_connect(), SSL_accept(), SSL_do_handshake(),
17 SSL_read_ex(), SSL_read(), SSL_peek_ex(), SSL_peek(), SSL_shutdown(),
18 SSL_write_ex() or SSL_write() on B<ssl>.  The value returned by that TLS/SSL I/O
19 function must be passed to SSL_get_error() in parameter B<ret>.
20
21 In addition to B<ssl> and B<ret>, SSL_get_error() inspects the
22 current thread's OpenSSL error queue.  Thus, SSL_get_error() must be
23 used in the same thread that performed the TLS/SSL I/O operation, and no
24 other OpenSSL function calls should appear in between.  The current
25 thread's error queue must be empty before the TLS/SSL I/O operation is
26 attempted, or SSL_get_error() will not work reliably.
27
28 =head1 NOTES
29
30 Some TLS implementations do not send a close_notify alert on shutdown.
31
32 On an unexpected EOF, versions before OpenSSL 3.0 returned
33 B<SSL_ERROR_SYSCALL>, nothing was added to the error stack, and errno was 0.
34 Since OpenSSL 3.0 the returned error is B<SSL_ERROR_SSL> with a meaningful
35 error on the error stack.
36
37 =head1 RETURN VALUES
38
39 The following return values can currently occur:
40
41 =over 4
42
43 =item SSL_ERROR_NONE
44
45 The TLS/SSL I/O operation completed.  This result code is returned
46 if and only if B<ret E<gt> 0>.
47
48 =item SSL_ERROR_ZERO_RETURN
49
50 The TLS/SSL peer has closed the connection for writing by sending the
51 close_notify alert.
52 No more data can be read.
53 Note that B<SSL_ERROR_ZERO_RETURN> does not necessarily
54 indicate that the underlying transport has been closed.
55
56 This error can also appear when the option B<SSL_OP_IGNORE_UNEXPECTED_EOF>
57 is set. See L<SSL_CTX_set_options(3)> for more details.
58
59 =item SSL_ERROR_WANT_READ, SSL_ERROR_WANT_WRITE
60
61 The operation did not complete and can be retried later.
62
63 For non-QUIC SSL objects, B<SSL_ERROR_WANT_READ> is returned when the last
64 operation was a read operation from a nonblocking B<BIO>.
65 It means that not enough data was available at this time to complete the
66 operation.
67 If at a later time the underlying B<BIO> has data available for reading the same
68 function can be called again.
69
70 SSL_read() and SSL_read_ex() can also set B<SSL_ERROR_WANT_READ> when there is
71 still unprocessed data available at either the B<SSL> or the B<BIO> layer, even
72 for a blocking B<BIO>.
73 See L<SSL_read(3)> for more information.
74
75 For non-QUIC SSL objects, B<SSL_ERROR_WANT_WRITE> is returned when the last
76 operation was a write to a nonblocking B<BIO> and it was unable to sent all data
77 to the B<BIO>. When the B<BIO> is writable again, the same function can be
78 called again.
79
80 Note that the retry may again lead to an B<SSL_ERROR_WANT_READ> or
81 B<SSL_ERROR_WANT_WRITE> condition.
82 There is no fixed upper limit for the number of iterations that
83 may be necessary until progress becomes visible at application
84 protocol level.
85
86 For QUIC SSL objects, the meaning of B<SSL_ERROR_WANT_READ> and
87 B<SSL_ERROR_WANT_WRITE> have different but largely compatible semantics. Since
88 QUIC implements its own flow control and uses UDP datagrams, backpressure
89 conditions in terms of the underlying BIO providing network I/O are not directly
90 relevant to the circumstances in which these errors are produced. In particular,
91 B<SSL_ERROR_WANT_WRITE> indicates that the OpenSSL internal send buffer for a
92 given QUIC stream has been filled. Likewise, B<SSL_ERROR_WANT_READ> indicates
93 that the OpenSSL internal receive buffer for a given QUIC stream is empty.
94
95 It is safe to call SSL_read() or SSL_read_ex() when more data is available
96 even when the call that set this error was an SSL_write() or SSL_write_ex().
97 However, if the call was an SSL_write() or SSL_write_ex(), it should be called
98 again to continue sending the application data. If you get B<SSL_ERROR_WANT_WRITE>
99 from SSL_write() or SSL_write_ex() then you should not do any other operation
100 that could trigger B<IO> other than to repeat the previous SSL_write() call.
101
102 For socket B<BIO>s (e.g. when SSL_set_fd() was used), select() or
103 poll() on the underlying socket can be used to find out when the
104 TLS/SSL I/O function should be retried.
105
106 Caveat: Any TLS/SSL I/O function can lead to either of
107 B<SSL_ERROR_WANT_READ> and B<SSL_ERROR_WANT_WRITE>.
108 In particular,
109 SSL_read_ex(), SSL_read(), SSL_peek_ex(), or SSL_peek() may want to write data
110 and SSL_write() or SSL_write_ex() may want to read data.
111 This is mainly because
112 TLS/SSL handshakes may occur at any time during the protocol (initiated by
113 either the client or the server); SSL_read_ex(), SSL_read(), SSL_peek_ex(),
114 SSL_peek(), SSL_write_ex(), and SSL_write() will handle any pending handshakes.
115
116 =item SSL_ERROR_WANT_CONNECT, SSL_ERROR_WANT_ACCEPT
117
118 The operation did not complete; the same TLS/SSL I/O function should be
119 called again later. The underlying BIO was not connected yet to the peer
120 and the call would block in connect()/accept(). The SSL function should be
121 called again when the connection is established. These messages can only
122 appear with a BIO_s_connect() or BIO_s_accept() BIO, respectively.
123 In order to find out, when the connection has been successfully established,
124 on many platforms select() or poll() for writing on the socket file descriptor
125 can be used.
126
127 =item SSL_ERROR_WANT_X509_LOOKUP
128
129 The operation did not complete because an application callback set by
130 SSL_CTX_set_client_cert_cb() has asked to be called again.
131 The TLS/SSL I/O function should be called again later.
132 Details depend on the application.
133
134 =item SSL_ERROR_WANT_ASYNC
135
136 The operation did not complete because an asynchronous engine is still
137 processing data. This will only occur if the mode has been set to SSL_MODE_ASYNC
138 using L<SSL_CTX_set_mode(3)> or L<SSL_set_mode(3)> and an asynchronous capable
139 engine is being used. An application can determine whether the engine has
140 completed its processing using select() or poll() on the asynchronous wait file
141 descriptor. This file descriptor is available by calling
142 L<SSL_get_all_async_fds(3)> or L<SSL_get_changed_async_fds(3)>. The TLS/SSL I/O
143 function should be called again later. The function B<must> be called from the
144 same thread that the original call was made from.
145
146 =item SSL_ERROR_WANT_ASYNC_JOB
147
148 The asynchronous job could not be started because there were no async jobs
149 available in the pool (see ASYNC_init_thread(3)). This will only occur if the
150 mode has been set to SSL_MODE_ASYNC using L<SSL_CTX_set_mode(3)> or
151 L<SSL_set_mode(3)> and a maximum limit has been set on the async job pool
152 through a call to L<ASYNC_init_thread(3)>. The application should retry the
153 operation after a currently executing asynchronous operation for the current
154 thread has completed.
155
156 =item SSL_ERROR_WANT_CLIENT_HELLO_CB
157
158 The operation did not complete because an application callback set by
159 SSL_CTX_set_client_hello_cb() has asked to be called again.
160 The TLS/SSL I/O function should be called again later.
161 Details depend on the application.
162
163 =item SSL_ERROR_SYSCALL
164
165 Some non-recoverable, fatal I/O error occurred. The OpenSSL error queue may
166 contain more information on the error. For socket I/O on Unix systems, consult
167 B<errno> for details. If this error occurs then no further I/O operations should
168 be performed on the connection and SSL_shutdown() must not be called.
169
170 This value can also be returned for other errors, check the error queue for
171 details.
172
173 =item SSL_ERROR_SSL
174
175 A non-recoverable, fatal error in the SSL library occurred, usually a protocol
176 error.  The OpenSSL error queue contains more information on the error. If this
177 error occurs then no further I/O operations should be performed on the
178 connection and SSL_shutdown() must not be called.
179
180 =back
181
182 =head1 SEE ALSO
183
184 L<ssl(7)>
185
186 =head1 HISTORY
187
188 The SSL_ERROR_WANT_ASYNC error code was added in OpenSSL 1.1.0.
189 The SSL_ERROR_WANT_CLIENT_HELLO_CB error code was added in OpenSSL 1.1.1.
190
191 =head1 COPYRIGHT
192
193 Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved.
194
195 Licensed under the Apache License 2.0 (the "License").  You may not use
196 this file except in compliance with the License.  You can obtain a copy
197 in the file LICENSE in the source distribution or at
198 L<https://www.openssl.org/source/license.html>.
199
200 =cut