Home | History | Annotate | Line # | Download | only in man3
      1 =pod
      2 
      3 =head1 NAME
      4 
      5 BIO_s_bio, BIO_make_bio_pair, BIO_destroy_bio_pair, BIO_shutdown_wr,
      6 BIO_set_write_buf_size, BIO_get_write_buf_size, BIO_new_bio_pair,
      7 BIO_get_write_guarantee, BIO_ctrl_get_write_guarantee, BIO_get_read_request,
      8 BIO_ctrl_get_read_request, BIO_ctrl_reset_read_request,
      9 BIO_nread0, BIO_nread, BIO_nwrite0, BIO_nwrite - BIO pair BIO
     10 
     11 =head1 SYNOPSIS
     12 
     13  #include <openssl/bio.h>
     14 
     15  const BIO_METHOD *BIO_s_bio(void);
     16 
     17  int BIO_make_bio_pair(BIO *b1, BIO *b2);
     18  int BIO_destroy_bio_pair(BIO *b);
     19  int BIO_shutdown_wr(BIO *b);
     20 
     21  int BIO_set_write_buf_size(BIO *b, long size);
     22  size_t BIO_get_write_buf_size(BIO *b, long size);
     23 
     24  int BIO_new_bio_pair(BIO **bio1, size_t writebuf1, BIO **bio2, size_t writebuf2);
     25 
     26  int BIO_get_write_guarantee(BIO *b);
     27  size_t BIO_ctrl_get_write_guarantee(BIO *b);
     28  int BIO_get_read_request(BIO *b);
     29  size_t BIO_ctrl_get_read_request(BIO *b);
     30  int BIO_ctrl_reset_read_request(BIO *b);
     31 
     32  int BIO_nread0(BIO *bio, char **buf);
     33  int BIO_nread(BIO *bio, char **buf, int num);
     34  int BIO_nwrite0(BIO *bio, char **buf);
     35  int BIO_nwrite(BIO *bio, char **buf, int num);
     36 
     37 =head1 DESCRIPTION
     38 
     39 BIO_s_bio() returns the method for a BIO pair. A BIO pair is a pair of source/sink
     40 BIOs where data written to either half of the pair is buffered and can be read from
     41 the other half. Both halves must usually by handled by the same application thread
     42 since no locking is done on the internal data structures.
     43 
     44 Since BIO chains typically end in a source/sink BIO it is possible to make this
     45 one half of a BIO pair and have all the data processed by the chain under application
     46 control.
     47 
     48 One typical use of BIO pairs is to place TLS/SSL I/O under application control, this
     49 can be used when the application wishes to use a non standard transport for
     50 TLS/SSL or the normal socket routines are inappropriate.
     51 
     52 Calls to BIO_read_ex() will read data from the buffer or request a retry if no
     53 data is available.
     54 
     55 Calls to BIO_write_ex() will place data in the buffer or request a retry if the
     56 buffer is full.
     57 
     58 The standard calls BIO_ctrl_pending() and BIO_ctrl_wpending() can be used to
     59 determine the amount of pending data in the read or write buffer.
     60 
     61 BIO_reset() clears any data in the write buffer.
     62 
     63 BIO_make_bio_pair() joins two separate BIOs into a connected pair.
     64 
     65 BIO_destroy_pair() destroys the association between two connected BIOs. Freeing
     66 up any half of the pair will automatically destroy the association.
     67 
     68 BIO_shutdown_wr() is used to close down a BIO B<b>. After this call no further
     69 writes on BIO B<b> are allowed (they will return an error). Reads on the other
     70 half of the pair will return any pending data or EOF when all pending data has
     71 been read.
     72 
     73 BIO_set_write_buf_size() sets the write buffer size of BIO B<b> to B<size>.
     74 If the size is not initialized a default value is used. This is currently
     75 17K, sufficient for a maximum size TLS record.
     76 
     77 BIO_get_write_buf_size() returns the size of the write buffer.
     78 
     79 BIO_new_bio_pair() combines the calls to BIO_new(), BIO_make_bio_pair() and
     80 BIO_set_write_buf_size() to create a connected pair of BIOs B<bio1>, B<bio2>
     81 with write buffer sizes B<writebuf1> and B<writebuf2>. If either size is
     82 zero then the default size is used.  BIO_new_bio_pair() does not check whether
     83 B<bio1> or B<bio2> do point to some other BIO, the values are overwritten,
     84 BIO_free() is not called.
     85 
     86 BIO_get_write_guarantee() and BIO_ctrl_get_write_guarantee() return the maximum
     87 length of data that can be currently written to the BIO. Writes larger than this
     88 value will return a value from BIO_write_ex() less than the amount requested or
     89 if the buffer is full request a retry. BIO_ctrl_get_write_guarantee() is a
     90 function whereas BIO_get_write_guarantee() is a macro.
     91 
     92 BIO_get_read_request() and BIO_ctrl_get_read_request() return the
     93 amount of data requested, or the buffer size if it is less, if the
     94 last read attempt at the other half of the BIO pair failed due to an
     95 empty buffer.  This can be used to determine how much data should be
     96 written to the BIO so the next read will succeed: this is most useful
     97 in TLS/SSL applications where the amount of data read is usually
     98 meaningful rather than just a buffer size. After a successful read
     99 this call will return zero.  It also will return zero once new data
    100 has been written satisfying the read request or part of it.
    101 Note that BIO_get_read_request() never returns an amount larger
    102 than that returned by BIO_get_write_guarantee().
    103 
    104 BIO_ctrl_reset_read_request() can also be used to reset the value returned by
    105 BIO_get_read_request() to zero.
    106 
    107 =head2 Non-copying Interface
    108 
    109 BIO_nread0(), BIO_nread(), BIO_nwrite0(), and BIO_nwrite() provide a non-copying
    110 interface for reading from and writing to BIO pairs. These functions allow
    111 direct access to the internal buffer, avoiding the overhead of copying data.
    112 
    113 BIO_nread0() returns in B<*buf> a pointer to the start of the available data
    114 in the peer's write buffer and returns the number of bytes available.
    115 This allows reading directly from the buffer without copying.
    116 It does not consume the data; a subsequent call to BIO_nread() is needed
    117 to advance the buffer position.
    118 
    119 BIO_nread() is similar to BIO_nread0() but also advances the read position
    120 by up to B<num> bytes. The actual number of bytes consumed is returned.
    121 The B<*buf> pointer is set to the start of the data that was consumed.
    122 Since the data is considered consumed after this call, the pointer returned
    123 by BIO_nread() should not be used afterwards unless the caller also
    124 controls the writing side. The typical pattern is to call BIO_nread0() first,
    125 use the data, and then call BIO_nread() to consume it.
    126 
    127 BIO_nwrite0() returns in B<*buf> a pointer to the start of the available
    128 space in the write buffer and returns the number of bytes that can be written.
    129 This allows writing directly to the buffer without copying.
    130 It does not commit the data; a subsequent call to BIO_nwrite() is needed
    131 to update the buffer length.
    132 
    133 BIO_nwrite() is similar to BIO_nwrite0() but also commits up to B<num> bytes
    134 as written. The actual number of bytes committed is returned.
    135 The B<*buf> pointer is set to the start of the region that was committed.
    136 BIO_nwrite() should only be called after the data has actually been written
    137 to the buffer obtained from BIO_nwrite0(), since committing signals data
    138 availability to the reading side.
    139 
    140 Note that due to the ring buffer implementation, if wrapping around would be
    141 required, BIO_nread0() and BIO_nwrite0() may return less than the total
    142 available space. In such cases, a second call may be needed to access the
    143 remaining data or space.
    144 
    145 =head1 NOTES
    146 
    147 Both halves of a BIO pair should be freed. That is even if one half is implicit
    148 freed due to a BIO_free_all() or SSL_free() call the other half needs to be freed.
    149 
    150 When used in bidirectional applications (such as TLS/SSL) care should be taken to
    151 flush any data in the write buffer. This can be done by calling BIO_pending()
    152 on the other half of the pair and, if any data is pending, reading it and sending
    153 it to the underlying transport. This must be done before any normal processing
    154 (such as calling select() ) due to a request and BIO_should_read() being true.
    155 
    156 To see why this is important consider a case where a request is sent using
    157 BIO_write_ex() and a response read with BIO_read_ex(), this can occur during an
    158 TLS/SSL handshake for example. BIO_write_ex() will succeed and place data in the
    159 write buffer. BIO_read_ex() will initially fail and BIO_should_read() will be
    160 true. If the application then waits for data to be available on the underlying
    161 transport before flushing the write buffer it will never succeed because the
    162 request was never sent!
    163 
    164 BIO_eof() is true if no data is in the peer BIO and the peer BIO has been
    165 shutdown.
    166 
    167 BIO_make_bio_pair(), BIO_destroy_bio_pair(), BIO_shutdown_wr(),
    168 BIO_set_write_buf_size(), BIO_get_write_buf_size(),
    169 BIO_get_write_guarantee(), and BIO_get_read_request() are implemented
    170 as macros.
    171 
    172 =head1 RETURN VALUES
    173 
    174 BIO_new_bio_pair() returns 1 on success, with the new BIOs available in
    175 B<bio1> and B<bio2>, or 0 on failure, with NULL pointers stored into the
    176 locations for B<bio1> and B<bio2>. Check the error stack for more information.
    177 
    178 [XXXXX: More return values need to be added here]
    179 
    180 BIO_nread0() returns the number of bytes available for reading, 0 if the peer
    181 has closed and no data remains (EOF), or -1 if no data is currently available
    182 (retry may be appropriate). If the BIO is not initialized, -2 is returned.
    183 
    184 BIO_nwrite0() returns the number of bytes of space available for writing, or -1
    185 if no space is currently available (retry may be appropriate) or the BIO has
    186 been closed. If the BIO is not initialized, -2 is returned.
    187 
    188 BIO_nread() and BIO_nwrite() return the number of bytes consumed or committed
    189 respectively, or the same error values as BIO_nread0() and BIO_nwrite0().
    190 
    191 =head1 EXAMPLES
    192 
    193 The BIO pair can be used to have full control over the network access of an
    194 application. The application can call select() on the socket as required
    195 without having to go through the SSL-interface.
    196 
    197  BIO *internal_bio, *network_bio;
    198 
    199  ...
    200  BIO_new_bio_pair(&internal_bio, 0, &network_bio, 0);
    201  SSL_set_bio(ssl, internal_bio, internal_bio);
    202  SSL_operations(); /* e.g. SSL_read and SSL_write */
    203  ...
    204 
    205  application |   TLS-engine
    206     |        |
    207     +----------> SSL_operations()
    208              |     /\    ||
    209              |     ||    \/
    210              |   BIO-pair (internal_bio)
    211              |   BIO-pair (network_bio)
    212              |     ||     /\
    213              |     \/     ||
    214     +-----------< BIO_operations()
    215     |        |
    216     |        |
    217    socket
    218 
    219   ...
    220   SSL_free(ssl);                /* implicitly frees internal_bio */
    221   BIO_free(network_bio);
    222   ...
    223 
    224 As the BIO pair will only buffer the data and never directly access the
    225 connection, it behaves nonblocking and will return as soon as the write
    226 buffer is full or the read buffer is drained. Then the application has to
    227 flush the write buffer and/or fill the read buffer.
    228 
    229 Use the BIO_ctrl_pending(), to find out whether data is buffered in the BIO
    230 and must be transferred to the network. Use BIO_ctrl_get_read_request() to
    231 find out, how many bytes must be written into the buffer before the
    232 SSL_operation() can successfully be continued.
    233 
    234 A typical usage pattern for the non-copying write interface is:
    235 
    236  int ret;
    237  char *buf;
    238 
    239  ret = BIO_nwrite0(bio, &buf);
    240  if (ret > 0) {
    241      /* write up to 'ret' bytes directly to 'buf' */
    242      memcpy(buf, data, len);
    243      BIO_nwrite(bio, &buf, len);  /* commit the write */
    244  }
    245 
    246 A typical usage pattern for the non-copying read interface is:
    247 
    248  int ret;
    249  char *buf;
    250 
    251  ret = BIO_nread0(bio, &buf);
    252  if (ret > 0) {
    253      /* read up to 'ret' bytes directly from 'buf' */
    254      process_data(buf, ret);
    255      BIO_nread(bio, &buf, ret);  /* consume the data */
    256  }
    257 
    258 =head1 WARNINGS
    259 
    260 As the data is buffered, SSL_operation() may return with an ERROR_SSL_WANT_READ
    261 condition, but there is still data in the write buffer. An application must
    262 not rely on the error value of SSL_operation() but must assure that the
    263 write buffer is always flushed first. Otherwise a deadlock may occur as
    264 the peer might be waiting for the data before being able to continue.
    265 
    266 =head1 SEE ALSO
    267 
    268 L<SSL_set_bio(3)>, L<ssl(7)>, L<bio(7)>,
    269 L<BIO_should_retry(3)>, L<BIO_read_ex(3)>
    270 
    271 =head1 COPYRIGHT
    272 
    273 Copyright 2000-2026 The OpenSSL Project Authors. All Rights Reserved.
    274 
    275 Licensed under the Apache License 2.0 (the "License").  You may not use
    276 this file except in compliance with the License.  You can obtain a copy
    277 in the file LICENSE in the source distribution or at
    278 L<https://www.openssl.org/source/license.html>.
    279 
    280 =cut
    281