aboutsummaryrefslogtreecommitdiff
path: root/doc/man3/SSL_read.pod
diff options
context:
space:
mode:
authorKurt Roeckx <kurt@roeckx.be>2018-05-13 11:24:11 +0200
committerKurt Roeckx <kurt@roeckx.be>2018-07-17 00:01:00 +0200
commit57fd517066418472b3280a975823405fb8f2f43d (patch)
treee82253ddc65a03912444328d6bc5badf093eefbe /doc/man3/SSL_read.pod
parent07fc8d5207febe53c8203a8a89fb7ba006871a1b (diff)
downloadopenssl-57fd517066418472b3280a975823405fb8f2f43d.zip
openssl-57fd517066418472b3280a975823405fb8f2f43d.tar.gz
openssl-57fd517066418472b3280a975823405fb8f2f43d.tar.bz2
Improve documentation about reading and writing
Reviewed-by: Matt Caswell <matt@openssl.org> GH: #6240
Diffstat (limited to 'doc/man3/SSL_read.pod')
-rw-r--r--doc/man3/SSL_read.pod53
1 files changed, 32 insertions, 21 deletions
diff --git a/doc/man3/SSL_read.pod b/doc/man3/SSL_read.pod
index 215d4c5..b1b2002 100644
--- a/doc/man3/SSL_read.pod
+++ b/doc/man3/SSL_read.pod
@@ -51,40 +51,47 @@ call. If B<num> is higher than the number of bytes buffered then the read
functions will return with the bytes buffered. If no more bytes are in the
buffer, the read functions will trigger the processing of the next record.
Only when the record has been received and processed completely will the read
-functions return reporting success. At most the contents of the record will
+functions return reporting success. At most the contents of one record will
be returned. As the size of an SSL/TLS record may exceed the maximum packet size
of the underlying transport (e.g. TCP), it may be necessary to read several
packets from the transport layer before the record is complete and the read call
can succeed.
+If B<SSL_MODE_AUTO_RETRY> has been switched off and a non-application data
+record has been processed, the read function can return and set the error to
+B<SSL_ERROR_WANT_READ>.
+In this case there might still be unprocessed data available in the B<BIO>.
+If read ahead was set using L<SSL_CTX_set_read_ahead(3)>, there might also still
+be unprocessed data available in the B<SSL>.
+This behaviour can be controlled using the L<SSL_CTX_set_mode(3)> call.
+
If the underlying BIO is B<blocking>, a read function will only return once the
read operation has been finished or an error occurred, except when a
-renegotiation takes place, in which case a SSL_ERROR_WANT_READ may occur. This
-behaviour can be controlled with the SSL_MODE_AUTO_RETRY flag of the
-L<SSL_CTX_set_mode(3)> call.
+non-application data record has been processed and B<SSL_MODE_AUTO_RETRY> is
+not set.
+Note that if B<SSL_MODE_AUTO_RETRY> is set and only non-application data is
+available the call will hang.
If the underlying BIO is B<non-blocking>, a read function will also return when
the underlying BIO could not satisfy the needs of the function to continue the
-operation. In this case a call to L<SSL_get_error(3)> with the
+operation.
+In this case a call to L<SSL_get_error(3)> with the
return value of the read function will yield B<SSL_ERROR_WANT_READ> or
-B<SSL_ERROR_WANT_WRITE>. As at any time a re-negotiation is possible, a
-a read function can also cause write operations! The calling process then must
-repeat the call after taking appropriate action to satisfy the needs of the read
-function. The action depends on the underlying BIO. When using a non-blocking
-socket, nothing is to be done, but select() can be used to check for the
-required condition. When using a buffering BIO, like a BIO pair, data must be
-written into or retrieved out of the BIO before being able to continue.
+B<SSL_ERROR_WANT_WRITE>.
+As at any time it's possible that non-application data needs to be sent,
+a read function can also cause write operations.
+The calling process then must repeat the call after taking appropriate action
+to satisfy the needs of the read function.
+The action depends on the underlying BIO.
+When using a non-blocking socket, nothing is to be done, but select() can be
+used to check for the required condition.
+When using a buffering BIO, like a BIO pair, data must be written into or
+retrieved out of the BIO before being able to continue.
L<SSL_pending(3)> can be used to find out whether there
-are buffered bytes available for immediate retrieval. In this case
-the read function can be called without blocking or actually receiving
-new data from the underlying socket.
-
-=head1 WARNING
-
-When a read function operation has to be repeated because L<SSL_get_error(3)>
-returned B<SSL_ERROR_WANT_READ> or B<SSL_ERROR_WANT_WRITE>, it must be repeated
-with the same arguments.
+are buffered bytes available for immediate retrieval.
+In this case the read function can be called without blocking or actually
+receiving new data from the underlying socket.
=head1 RETURN VALUES
@@ -119,6 +126,10 @@ You should instead call SSL_get_error() to find out if it's retryable.
=back
+=head1 HISTORY
+
+SSL_read_ex() and SSL_peek_ex() were added in OpenSSL 1.1.1.
+
=head1 SEE ALSO
L<SSL_get_error(3)>, L<SSL_write_ex(3)>,