Richard Levitte | cc99526 | 2000-09-14 13:11:56 +0000 | [diff] [blame] | 1 | =pod |
| 2 | |
| 3 | =head1 NAME |
| 4 | |
Ulf Möller | 4ce7894 | 2000-12-13 23:00:33 +0000 | [diff] [blame] | 5 | SSL_write - write bytes to a TLS/SSL connection. |
Richard Levitte | cc99526 | 2000-09-14 13:11:56 +0000 | [diff] [blame] | 6 | |
| 7 | =head1 SYNOPSIS |
| 8 | |
| 9 | #include <openssl/ssl.h> |
| 10 | |
Bodo Möller | e34cfcf | 2001-03-09 10:09:20 +0000 | [diff] [blame] | 11 | int SSL_write(SSL *ssl, const void *buf, int num); |
Richard Levitte | cc99526 | 2000-09-14 13:11:56 +0000 | [diff] [blame] | 12 | |
| 13 | =head1 DESCRIPTION |
| 14 | |
| 15 | SSL_write() writes B<num> bytes from the buffer B<buf> into the specified |
Richard Levitte | c19b6c9 | 2000-09-21 06:46:15 +0000 | [diff] [blame] | 16 | B<ssl> connection. |
| 17 | |
| 18 | =head1 NOTES |
| 19 | |
| 20 | If necessary, SSL_write() will negotiate a TLS/SSL session, if |
Lutz Jänicke | b72ff47 | 2001-03-08 17:24:02 +0000 | [diff] [blame] | 21 | not already explicitly performed by L<SSL_connect(3)|SSL_connect(3)> or |
| 22 | L<SSL_accept(3)|SSL_accept(3)>. If the |
Richard Levitte | cc99526 | 2000-09-14 13:11:56 +0000 | [diff] [blame] | 23 | peer requests a re-negotiation, it will be performed transparently during |
Bodo Möller | acb5b34 | 2000-09-16 16:00:38 +0000 | [diff] [blame] | 24 | the SSL_write() operation. The behaviour of SSL_write() depends on the |
Richard Levitte | cc99526 | 2000-09-14 13:11:56 +0000 | [diff] [blame] | 25 | underlying BIO. |
| 26 | |
Lutz Jänicke | b72ff47 | 2001-03-08 17:24:02 +0000 | [diff] [blame] | 27 | For the transparent negotiation to succeed, the B<ssl> must have been |
Lutz Jänicke | 7abe76e | 2001-07-25 12:12:51 +0000 | [diff] [blame] | 28 | initialized to client or server mode. This is being done by calling |
Lutz Jänicke | b72ff47 | 2001-03-08 17:24:02 +0000 | [diff] [blame] | 29 | L<SSL_set_connect_state(3)|SSL_set_connect_state(3)> or SSL_set_accept_state() |
Lutz Jänicke | 7abe76e | 2001-07-25 12:12:51 +0000 | [diff] [blame] | 30 | before the first call to an L<SSL_read(3)|SSL_read(3)> or SSL_write() function. |
Lutz Jänicke | b72ff47 | 2001-03-08 17:24:02 +0000 | [diff] [blame] | 31 | |
Richard Levitte | cc99526 | 2000-09-14 13:11:56 +0000 | [diff] [blame] | 32 | If the underlying BIO is B<blocking>, SSL_write() will only return, once the |
Lutz Jänicke | f282ca7 | 2001-02-13 11:43:11 +0000 | [diff] [blame] | 33 | write operation has been finished or an error occurred, except when a |
| 34 | renegotiation take place, in which case a SSL_ERROR_WANT_READ may occur. |
| 35 | This behaviour can be controlled with the SSL_MODE_AUTO_RETRY flag of the |
| 36 | L<SSL_CTX_set_mode(3)|SSL_CTX_set_mode(3)> call. |
Richard Levitte | cc99526 | 2000-09-14 13:11:56 +0000 | [diff] [blame] | 37 | |
| 38 | If the underlying BIO is B<non-blocking>, SSL_write() will also return, |
| 39 | when the underlying BIO could not satisfy the needs of SSL_write() |
Lutz Jänicke | b72ff47 | 2001-03-08 17:24:02 +0000 | [diff] [blame] | 40 | to continue the operation. In this case a call to |
| 41 | L<SSL_get_error(3)|SSL_get_error(3)> with the |
Ulf Möller | 1e4e549 | 2000-09-16 15:39:28 +0000 | [diff] [blame] | 42 | return value of SSL_write() will yield B<SSL_ERROR_WANT_READ> or |
| 43 | B<SSL_ERROR_WANT_WRITE>. As at any time a re-negotiation is possible, a |
Ulf Möller | 0fa504b | 2000-10-23 14:02:02 +0000 | [diff] [blame] | 44 | call to SSL_write() can also cause read operations! The calling process |
Richard Levitte | cc99526 | 2000-09-14 13:11:56 +0000 | [diff] [blame] | 45 | then must repeat the call after taking appropriate action to satisfy the |
| 46 | needs of SSL_write(). The action depends on the underlying BIO. When using a |
| 47 | non-blocking socket, nothing is to be done, but select() can be used to check |
| 48 | for the required condition. When using a buffering BIO, like a BIO pair, data |
| 49 | must be written into or retrieved out of the BIO before being able to continue. |
| 50 | |
Lutz Jänicke | 4b3270f | 2001-05-11 09:53:10 +0000 | [diff] [blame] | 51 | SSL_write() will only return with success, when the complete contents |
| 52 | of B<buf> of length B<num> has been written. This default behaviour |
| 53 | can be changed with the SSL_MODE_ENABLE_PARTIAL_WRITE option of |
| 54 | L<SSL_CTX_set_mode(3)|SSL_CTX_set_mode(3)>. When this flag is set, |
| 55 | SSL_write() will also return with success, when a partial write has been |
| 56 | successfully completed. In this case the SSL_write() operation is considered |
| 57 | completed. The bytes are sent and a new SSL_write() operation with a new |
| 58 | buffer (with the already sent bytes removed) must be started. |
| 59 | A partial write is performed with the size of a message block, which is |
| 60 | 16kB for SSLv3/TLSv1. |
| 61 | |
Richard Levitte | 4aa4f33 | 2000-09-21 17:21:15 +0000 | [diff] [blame] | 62 | =head1 WARNING |
Richard Levitte | c19b6c9 | 2000-09-21 06:46:15 +0000 | [diff] [blame] | 63 | |
| 64 | When an SSL_write() operation has to be repeated because of |
| 65 | B<SSL_ERROR_WANT_READ> or B<SSL_ERROR_WANT_WRITE>, it must be repeated |
| 66 | with the same arguments. |
| 67 | |
Lutz Jänicke | 20adcfa | 2002-07-19 11:53:54 +0000 | [diff] [blame] | 68 | When calling SSL_write() with num=0 bytes to be sent the behaviour is |
| 69 | undefined. |
| 70 | |
Richard Levitte | cc99526 | 2000-09-14 13:11:56 +0000 | [diff] [blame] | 71 | =head1 RETURN VALUES |
| 72 | |
| 73 | The following return values can occur: |
| 74 | |
| 75 | =over 4 |
| 76 | |
| 77 | =item E<gt>0 |
| 78 | |
Ulf Möller | 1e4e549 | 2000-09-16 15:39:28 +0000 | [diff] [blame] | 79 | The write operation was successful, the return value is the number of |
| 80 | bytes actually written to the TLS/SSL connection. |
Richard Levitte | cc99526 | 2000-09-14 13:11:56 +0000 | [diff] [blame] | 81 | |
Lubomir Rintel | c8919dd | 2013-10-21 11:03:01 +0200 | [diff] [blame] | 82 | =item Z<>0 |
Richard Levitte | cc99526 | 2000-09-14 13:11:56 +0000 | [diff] [blame] | 83 | |
Lutz Jänicke | 6d8566f | 2001-09-13 13:21:38 +0000 | [diff] [blame] | 84 | The write operation was not successful. Probably the underlying connection |
| 85 | was closed. Call SSL_get_error() with the return value B<ret> to find out, |
Lutz Jänicke | d93eb21 | 2001-08-20 14:34:16 +0000 | [diff] [blame] | 86 | whether an error occurred or the connection was shut down cleanly |
| 87 | (SSL_ERROR_ZERO_RETURN). |
| 88 | |
| 89 | SSLv2 (deprecated) does not support a shutdown alert protocol, so it can |
| 90 | only be detected, whether the underlying connection was closed. It cannot |
| 91 | be checked, why the closure happened. |
Richard Levitte | cc99526 | 2000-09-14 13:11:56 +0000 | [diff] [blame] | 92 | |
Richard Levitte | 53fe8d5 | 2000-10-10 09:15:47 +0000 | [diff] [blame] | 93 | =item E<lt>0 |
Richard Levitte | cc99526 | 2000-09-14 13:11:56 +0000 | [diff] [blame] | 94 | |
Ulf Möller | 4ce7894 | 2000-12-13 23:00:33 +0000 | [diff] [blame] | 95 | The write operation was not successful, because either an error occurred |
Richard Levitte | cc99526 | 2000-09-14 13:11:56 +0000 | [diff] [blame] | 96 | or action must be taken by the calling process. Call SSL_get_error() with the |
| 97 | return value B<ret> to find out the reason. |
| 98 | |
| 99 | =back |
| 100 | |
| 101 | =head1 SEE ALSO |
| 102 | |
| 103 | L<SSL_get_error(3)|SSL_get_error(3)>, L<SSL_read(3)|SSL_read(3)>, |
Lutz Jänicke | b72ff47 | 2001-03-08 17:24:02 +0000 | [diff] [blame] | 104 | L<SSL_CTX_set_mode(3)|SSL_CTX_set_mode(3)>, L<SSL_CTX_new(3)|SSL_CTX_new(3)>, |
| 105 | L<SSL_connect(3)|SSL_connect(3)>, L<SSL_accept(3)|SSL_accept(3)> |
| 106 | L<SSL_set_connect_state(3)|SSL_set_connect_state(3)>, |
Richard Levitte | cc99526 | 2000-09-14 13:11:56 +0000 | [diff] [blame] | 107 | L<ssl(3)|ssl(3)>, L<bio(3)|bio(3)> |
| 108 | |
| 109 | =cut |