xref: /openssl/doc/man3/SSL_write.pod (revision b6461792)
1=pod
2
3=head1 NAME
4
5SSL_write_ex2, SSL_write_ex, SSL_write, SSL_sendfile, SSL_WRITE_FLAG_CONCLUDE -
6write bytes to a TLS/SSL connection
7
8=head1 SYNOPSIS
9
10 #include <openssl/ssl.h>
11
12 #define SSL_WRITE_FLAG_CONCLUDE
13
14 ossl_ssize_t SSL_sendfile(SSL *s, int fd, off_t offset, size_t size, int flags);
15 int SSL_write_ex2(SSL *s, const void *buf, size_t num,
16                   uint64_t flags,
17                   size_t *written);
18 int SSL_write_ex(SSL *s, const void *buf, size_t num, size_t *written);
19 int SSL_write(SSL *ssl, const void *buf, int num);
20
21=head1 DESCRIPTION
22
23SSL_write_ex() and SSL_write() write B<num> bytes from the buffer B<buf> into
24the specified B<ssl> connection. On success SSL_write_ex() will store the number
25of bytes written in B<*written>.
26
27SSL_write_ex2() functions similarly to SSL_write_ex() but can also accept
28optional flags which modify its behaviour. Calling SSL_write_ex2() with a
29I<flags> argument of 0 is exactly equivalent to calling SSL_write_ex().
30
31SSL_sendfile() writes B<size> bytes from offset B<offset> in the file
32descriptor B<fd> to the specified SSL connection B<s>. This function provides
33efficient zero-copy semantics. SSL_sendfile() is available only when
34Kernel TLS is enabled, which can be checked by calling BIO_get_ktls_send().
35It is provided here to allow users to maintain the same interface.
36The meaning of B<flags> is platform dependent.
37Currently, under Linux it is ignored.
38
39The I<flags> argument to SSL_write_ex2() can accept zero or more of the
40following flags. Note that which flags are supported will depend on the kind of
41SSL object and underlying protocol being used:
42
43=over 4
44
45=item B<SSL_WRITE_FLAG_CONCLUDE>
46
47This flag is only supported on QUIC stream SSL objects (or QUIC connection SSL
48objects with a default stream attached).
49
50If this flag is set, and the call to SSL_write_ex2() succeeds, and all of the
51data passed to the call is written (meaning that C<*written == num>), the
52relevant QUIC stream's send part is concluded automatically as though
53L<SSL_stream_conclude(3)> was called (causing transmission of a FIN for the
54stream).
55
56While using this flag is semantically equivalent to calling
57L<SSL_stream_conclude(3)> after a successful call to this function, using this
58flag enables greater efficiency than making these two API calls separately, as
59it enables the written stream data and the FIN flag indicating the end of the
60stream to be scheduled as part of the same QUIC STREAM frame and QUIC packet.
61
62Setting this flag does not cause a stream's send part to be concluded if not all
63of the data passed to the call was consumed.
64
65=back
66
67A call to SSL_write_ex2() fails if a flag is passed which is not supported or
68understood by the given SSL object. An application should determine if a flag is
69supported (for example, for B<SSL_WRITE_FLAG_CONCLUDE>, that a QUIC stream SSL
70object is being used) before attempting to use it.
71
72=head1 NOTES
73
74In the paragraphs below a "write function" is defined as one of either
75SSL_write_ex(), or SSL_write().
76
77If necessary, a write function will negotiate a TLS/SSL session, if not already
78explicitly performed by L<SSL_connect(3)> or L<SSL_accept(3)>. If the peer
79requests a re-negotiation, it will be performed transparently during
80the write function operation. The behaviour of the write functions depends on the
81underlying BIO.
82
83For the transparent negotiation to succeed, the B<ssl> must have been
84initialized to client or server mode. This is being done by calling
85L<SSL_set_connect_state(3)> or SSL_set_accept_state()
86before the first call to a write function.
87
88If the underlying BIO is B<blocking>, the write functions will only return, once
89the write operation has been finished or an error occurred.
90
91If the underlying BIO is B<nonblocking> the write functions will also return
92when the underlying BIO could not satisfy the needs of the function to continue
93the operation. In this case a call to L<SSL_get_error(3)> with the
94return value of the write function will yield B<SSL_ERROR_WANT_READ>
95or B<SSL_ERROR_WANT_WRITE>. As at any time a re-negotiation is possible, a
96call to a write function can also cause read operations! The calling process
97then must repeat the call after taking appropriate action to satisfy the needs
98of the write function. The action depends on the underlying BIO. When using a
99nonblocking socket, nothing is to be done, but select() can be used to check
100for the required condition. When using a buffering BIO, like a BIO pair, data
101must be written into or retrieved out of the BIO before being able to continue.
102
103The write functions will only return with success when the complete contents of
104B<buf> of length B<num> has been written. This default behaviour can be changed
105with the SSL_MODE_ENABLE_PARTIAL_WRITE option of L<SSL_CTX_set_mode(3)>. When
106this flag is set the write functions will also return with success when a
107partial write has been successfully completed. In this case the write function
108operation is considered completed. The bytes are sent and a new write call with
109a new buffer (with the already sent bytes removed) must be started. A partial
110write is performed with the size of a message block, which is 16kB.
111
112When used with a QUIC SSL object, calling an I/O function such as SSL_write()
113allows internal network event processing to be performed. It is important that
114this processing is performed regularly. If an application is not using thread
115assisted mode, an application should ensure that an I/O function such as
116SSL_write() is called regularly, or alternatively ensure that SSL_handle_events()
117is called regularly. See L<openssl-quic(7)> and L<SSL_handle_events(3)> for more
118information.
119
120=head1 WARNINGS
121
122When a write function call has to be repeated because L<SSL_get_error(3)>
123returned B<SSL_ERROR_WANT_READ> or B<SSL_ERROR_WANT_WRITE>, it must be repeated
124with the same arguments.
125The data that was passed might have been partially processed.
126When B<SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER> was set using L<SSL_CTX_set_mode(3)>
127the pointer can be different, but the data and length should still be the same.
128
129You should not call SSL_write() with num=0, it will return an error.
130SSL_write_ex() can be called with num=0, but will not send application data to
131the peer.
132
133=head1 RETURN VALUES
134
135SSL_write_ex() and SSL_write_ex2() return 1 for success or 0 for failure.
136Success means that all requested application data bytes have been written to the
137SSL connection or, if SSL_MODE_ENABLE_PARTIAL_WRITE is in use, at least 1
138application data byte has been written to the SSL connection. Failure means that
139not all the requested bytes have been written yet (if
140SSL_MODE_ENABLE_PARTIAL_WRITE is not in use) or no bytes could be written to the
141SSL connection (if SSL_MODE_ENABLE_PARTIAL_WRITE is in use). Failures can be
142retryable (e.g. the network write buffer has temporarily filled up) or
143non-retryable (e.g. a fatal network error). In the event of a failure call
144L<SSL_get_error(3)> to find out the reason which indicates whether the call is
145retryable or not.
146
147For SSL_write() the following return values can occur:
148
149=over 4
150
151=item E<gt> 0
152
153The write operation was successful, the return value is the number of
154bytes actually written to the TLS/SSL connection.
155
156=item Z<><= 0
157
158The write operation was not successful, because either the connection was
159closed, an error occurred or action must be taken by the calling process.
160Call SSL_get_error() with the return value B<ret> to find out the reason.
161
162Old documentation indicated a difference between 0 and -1, and that -1 was
163retryable.
164You should instead call SSL_get_error() to find out if it's retryable.
165
166=back
167
168For SSL_sendfile(), the following return values can occur:
169
170=over 4
171
172=item Z<>>= 0
173
174The write operation was successful, the return value is the number
175of bytes of the file written to the TLS/SSL connection. The return
176value can be less than B<size> for a partial write.
177
178=item E<lt> 0
179
180The write operation was not successful, because either the connection was
181closed, an error occurred or action must be taken by the calling process.
182Call SSL_get_error() with the return value to find out the reason.
183
184=back
185
186=head1 SEE ALSO
187
188L<SSL_get_error(3)>, L<SSL_read_ex(3)>, L<SSL_read(3)>
189L<SSL_CTX_set_mode(3)>, L<SSL_CTX_new(3)>,
190L<SSL_connect(3)>, L<SSL_accept(3)>
191L<SSL_set_connect_state(3)>, L<BIO_ctrl(3)>,
192L<ssl(7)>, L<bio(7)>
193
194=head1 HISTORY
195
196The SSL_write_ex() function was added in OpenSSL 1.1.1.
197The SSL_sendfile() function was added in OpenSSL 3.0.
198
199=head1 COPYRIGHT
200
201Copyright 2000-2024 The OpenSSL Project Authors. All Rights Reserved.
202
203Licensed under the Apache License 2.0 (the "License").  You may not use
204this file except in compliance with the License.  You can obtain a copy
205in the file LICENSE in the source distribution or at
206L<https://www.openssl.org/source/license.html>.
207
208=cut
209