Blame doc/man3/SSL_write.pod

Packit Service 084de1
=pod
Packit Service 084de1
Packit Service 084de1
=head1 NAME
Packit Service 084de1
Packit Service 084de1
SSL_write_ex, SSL_write - write bytes to a TLS/SSL connection
Packit Service 084de1
Packit Service 084de1
=head1 SYNOPSIS
Packit Service 084de1
Packit Service 084de1
 #include <openssl/ssl.h>
Packit Service 084de1
Packit Service 084de1
 int SSL_write_ex(SSL *s, const void *buf, size_t num, size_t *written);
Packit Service 084de1
 int SSL_write(SSL *ssl, const void *buf, int num);
Packit Service 084de1
Packit Service 084de1
=head1 DESCRIPTION
Packit Service 084de1
Packit Service 084de1
SSL_write_ex() and SSL_write() write B<num> bytes from the buffer B<buf> into
Packit Service 084de1
the specified B<ssl> connection. On success SSL_write_ex() will store the number
Packit Service 084de1
of bytes written in B<*written>.
Packit Service 084de1
Packit Service 084de1
=head1 NOTES
Packit Service 084de1
Packit Service 084de1
In the paragraphs below a "write function" is defined as one of either
Packit Service 084de1
SSL_write_ex(), or SSL_write().
Packit Service 084de1
Packit Service 084de1
If necessary, a write function will negotiate a TLS/SSL session, if not already
Packit Service 084de1
explicitly performed by L<SSL_connect(3)> or L<SSL_accept(3)>. If the peer
Packit Service 084de1
requests a re-negotiation, it will be performed transparently during
Packit Service 084de1
the write function operation. The behaviour of the write functions depends on the
Packit Service 084de1
underlying BIO.
Packit Service 084de1
Packit Service 084de1
For the transparent negotiation to succeed, the B<ssl> must have been
Packit Service 084de1
initialized to client or server mode. This is being done by calling
Packit Service 084de1
L<SSL_set_connect_state(3)> or SSL_set_accept_state()
Packit Service 084de1
before the first call to a write function.
Packit Service 084de1
Packit Service 084de1
If the underlying BIO is B<blocking>, the write functions will only return, once
Packit Service 084de1
the write operation has been finished or an error occurred.
Packit Service 084de1
Packit Service 084de1
If the underlying BIO is B<non-blocking> the write functions will also return
Packit Service 084de1
when the underlying BIO could not satisfy the needs of the function to continue
Packit Service 084de1
the operation. In this case a call to L<SSL_get_error(3)> with the
Packit Service 084de1
return value of the write function will yield B<SSL_ERROR_WANT_READ>
Packit Service 084de1
or B<SSL_ERROR_WANT_WRITE>. As at any time a re-negotiation is possible, a
Packit Service 084de1
call to a write function can also cause read operations! The calling process
Packit Service 084de1
then must repeat the call after taking appropriate action to satisfy the needs
Packit Service 084de1
of the write function. The action depends on the underlying BIO. When using a
Packit Service 084de1
non-blocking socket, nothing is to be done, but select() can be used to check
Packit Service 084de1
for the required condition. When using a buffering BIO, like a BIO pair, data
Packit Service 084de1
must be written into or retrieved out of the BIO before being able to continue.
Packit Service 084de1
Packit Service 084de1
The write functions will only return with success when the complete contents of
Packit Service 084de1
B<buf> of length B<num> has been written. This default behaviour can be changed
Packit Service 084de1
with the SSL_MODE_ENABLE_PARTIAL_WRITE option of L<SSL_CTX_set_mode(3)>. When
Packit Service 084de1
this flag is set the write functions will also return with success when a
Packit Service 084de1
partial write has been successfully completed. In this case the write function
Packit Service 084de1
operation is considered completed. The bytes are sent and a new write call with
Packit Service 084de1
a new buffer (with the already sent bytes removed) must be started. A partial
Packit Service 084de1
write is performed with the size of a message block, which is 16kB.
Packit Service 084de1
Packit Service 084de1
=head1 WARNINGS
Packit Service 084de1
Packit Service 084de1
When a write function call has to be repeated because L<SSL_get_error(3)>
Packit Service 084de1
returned B<SSL_ERROR_WANT_READ> or B<SSL_ERROR_WANT_WRITE>, it must be repeated
Packit Service 084de1
with the same arguments.
Packit Service 084de1
The data that was passed might have been partially processed.
Packit Service 084de1
When B<SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER> was set using L<SSL_CTX_set_mode(3)>
Packit Service 084de1
the pointer can be different, but the data and length should still be the same.
Packit Service 084de1
Packit Service 084de1
You should not call SSL_write() with num=0, it will return an error.
Packit Service 084de1
SSL_write_ex() can be called with num=0, but will not send application data to
Packit Service 084de1
the peer.
Packit Service 084de1
Packit Service 084de1
=head1 RETURN VALUES
Packit Service 084de1
Packit Service 084de1
SSL_write_ex() will return 1 for success or 0 for failure. Success means that
Packit Service 084de1
all requested application data bytes have been written to the SSL connection or,
Packit Service 084de1
if SSL_MODE_ENABLE_PARTIAL_WRITE is in use, at least 1 application data byte has
Packit Service 084de1
been written to the SSL connection. Failure means that not all the requested
Packit Service 084de1
bytes have been written yet (if SSL_MODE_ENABLE_PARTIAL_WRITE is not in use) or
Packit Service 084de1
no bytes could be written to the SSL connection (if
Packit Service 084de1
SSL_MODE_ENABLE_PARTIAL_WRITE is in use). Failures can be retryable (e.g. the
Packit Service 084de1
network write buffer has temporarily filled up) or non-retryable (e.g. a fatal
Packit Service 084de1
network error). In the event of a failure call L<SSL_get_error(3)> to find out
Packit Service 084de1
the reason which indicates whether the call is retryable or not.
Packit Service 084de1
Packit Service 084de1
For SSL_write() the following return values can occur:
Packit Service 084de1
Packit Service 084de1
=over 4
Packit Service 084de1
Packit Service 084de1
=item E<gt> 0
Packit Service 084de1
Packit Service 084de1
The write operation was successful, the return value is the number of
Packit Service 084de1
bytes actually written to the TLS/SSL connection.
Packit Service 084de1
Packit Service 084de1
=item Z<><= 0
Packit Service 084de1
Packit Service 084de1
The write operation was not successful, because either the connection was
Packit Service 084de1
closed, an error occurred or action must be taken by the calling process.
Packit Service 084de1
Call SSL_get_error() with the return value B<ret> to find out the reason.
Packit Service 084de1
Packit Service 084de1
Old documentation indicated a difference between 0 and -1, and that -1 was
Packit Service 084de1
retryable.
Packit Service 084de1
You should instead call SSL_get_error() to find out if it's retryable.
Packit Service 084de1
Packit Service 084de1
=back
Packit Service 084de1
Packit Service 084de1
=head1 SEE ALSO
Packit Service 084de1
Packit Service 084de1
L<SSL_get_error(3)>, L<SSL_read_ex(3)>, L<SSL_read(3)>
Packit Service 084de1
L<SSL_CTX_set_mode(3)>, L<SSL_CTX_new(3)>,
Packit Service 084de1
L<SSL_connect(3)>, L<SSL_accept(3)>
Packit Service 084de1
L<SSL_set_connect_state(3)>,
Packit Service 084de1
L<ssl(7)>, L<bio(7)>
Packit Service 084de1
Packit Service 084de1
=head1 HISTORY
Packit Service 084de1
Packit Service 084de1
The SSL_write_ex() function was added in OpenSSL 1.1.1.
Packit Service 084de1
Packit Service 084de1
=head1 COPYRIGHT
Packit Service 084de1
Packit Service 084de1
Copyright 2000-2019 The OpenSSL Project Authors. All Rights Reserved.
Packit Service 084de1
Packit Service 084de1
Licensed under the OpenSSL license (the "License").  You may not use
Packit Service 084de1
this file except in compliance with the License.  You can obtain a copy
Packit Service 084de1
in the file LICENSE in the source distribution or at
Packit Service 084de1
L<https://www.openssl.org/source/license.html>.
Packit Service 084de1
Packit Service 084de1
=cut