SSL_get_error.pod 2.9 KB
Newer Older
B
Bodo Möller 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
=pod

=head1 NAME

SSL_get_error - obtain result code for SSL I/O operation

=head1 SYNOPSIS

 #include <openssl/ssl.h>

 int SSL_get_error(SSL *ssl, int ret);

=head1 DESCRIPTION

SSL_get_error() returns a result code (suitable for the C "switch"
statement) for a preceding call to SSL_connect(), SSL_accept(),
SSL_read(), or SSL_write() on B<ssl>.  The value returned by that
SSL I/O function must be passed to SSL_get_error() in parameter
B<ret>.

In addition to B<ssl> and B<ret>, SSL_get_error() inspects the
current thread's OpenSSL error queue.  Thus, SSL_get_error() must be
used in the same thread that performed the SSL I/O operation, and no
U
Ulf Möller 已提交
24
other OpenSSL function calls should appear in between.  The current
B
Bodo Möller 已提交
25 26 27 28 29 30 31 32 33 34 35 36
thread's error queue must be empty before the SSL I/O operation is
attempted, or SSL_get_error() will not work reliably.

=head1 RETURN VALUES

The following return values can currently occur:

=over 4

=item SSL_ERROR_NONE

The SSL I/O operation completed.  This result code is returned
U
Ulf Möller 已提交
37
if and only if B<ret E<gt> 0>.
B
Bodo Möller 已提交
38 39 40 41 42

=item SSL_ERROR_ZERO_RETURN

The SSL connection has been closed.  If the protocol version is SSL 3.0
or TLS 1.0, this result code is returned only if a closure
U
Ulf Möller 已提交
43
alerts has occurred in the protocol, i.e. if the connection has been
B
Bodo Möller 已提交
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
closed cleanly.

=item SSL_ERROR_WANT_READ, SSL_ERROR_WANT_WRITE

The operation did not complete; the same SSL I/O function should be
called again later.  There will be protocol progress if, by then, the
underlying B<BIO> has data available for reading (if the result code is
B<SSL_ERROR_WANT_READ>) or allows writing data (B<SSL_ERROR_WANT_WRITE>). 
For socket B<BIO>s (e.g. when SSL_set_fd() was used) this means that
select() or poll() on the underlying socket can be used to find out
when the SSL I/O function should be retried.

Caveat: Any SSL I/O function can lead to either of
B<SSL_ERROR_WANT_READ> and B<SSL_ERROR_WANT_WRITE>, i.e. SSL_read()
may want to write data and SSL_write() may want to read data.

=item SSL_ERROR_WANT_X509_LOOKUP

The operation did not complete because an application callback set by
SSL_CTX_set_client_cert_cb() has asked to be called again.
The SSL I/O function should be called again later.
Details depend on the application.

=item SSL_ERROR_SYSCALL

Some I/O error occurred.  The OpenSSL error queue may contain more
information on the error.  If the error queue is empty
(i.e. ERR_get_error() returns 0), B<ret> can be used to find out more
about the error: If B<ret == 0>, an EOF was observed that violates
the protocol.  If B<ret == -1>, the underlying B<BIO> reported an
B
Bodo Möller 已提交
74
I/O error (for socket I/O on Unix systems, consult B<errno> for details).
B
Bodo Möller 已提交
75 76 77

=item SSL_ERROR_SSL

U
Ulf Möller 已提交
78
A failure in the SSL library occurred, usually a protocol error.  The
B
Bodo Möller 已提交
79 80 81 82 83 84
OpenSSL error queue contains more information on the error.

=back

=head1 SEE ALSO

85
L<ssl(3)|ssl(3)>, L<err(3)|err(3)>
B
Bodo Möller 已提交
86 87 88 89 90 91

=head1 HISTORY

SSL_get_error() was added in SSLeay 0.8.

=cut