SSL_set_bio, SSL_set0_rbio, SSL_set0_wbio - connect the SSL object with a BIO
#include <openssl/ssl.h>
void SSL_set_bio(SSL *ssl, BIO *rbio, BIO *wbio);
void SSL_set0_rbio(SSL *s, BIO *rbio);
void SSL_set0_wbio(SSL *s, BIO *wbio);
SSL_set0_rbio() connects the BIO rbio for the read operations of
the ssl object. The SSL engine inherits the behaviour of rbio.
If the BIO is non-blocking then the ssl object will also have
non-blocking behaviour. This function transfers ownership of rbio to
ssl. It will be automatically freed using BIO_free_all(3) when
the ssl is freed. On calling this function, any existing rbio
that was previously set will also be freed via a call to
BIO_free_all(3) (this includes the case where the rbio is set to
the same value as previously).
SSL_set0_wbio() works in the same as SSL_set0_rbio()
except that it connects the BIO wbio for the write operations of the
ssl object. Note that if the rbio and wbio are the same then
SSL_set0_rbio() and SSL_set0_wbio() each take ownership of one
reference. Therefore it may be necessary to increment the number of
references available using BIO_up_ref(3) before calling the set0
functions.
SSL_set_bio() is similar to SSL_set0_rbio() and
SSL_set0_wbio() except that it connects both the rbio and the
wbio at the same time, and transfers the ownership of rbio and
wbio to ssl according to the following set of rules:
- If neither the rbio or wbio have changed from their previous
values then nothing is done.
- If the rbio and wbio parameters are different and both are
different to their previously set values then one reference is consumed
for the rbio and one reference is consumed for the wbio.
- If the rbio and wbio parameters are the same and the
rbio is not the same as the previously set value then one reference
is consumed.
- If the rbio and wbio parameters are the same and the
rbio is the same as the previously set value, then no additional
references are consumed.
- If the rbio and wbio parameters are different and the
rbio is the same as the previously set value then one reference is
consumed for the wbio and no references are consumed for the
rbio.
- If the rbio and wbio parameters are different and the
wbio is the same as the previously set value and the old
rbio and wbio values were the same as each other then one
reference is consumed for the rbio and no references are consumed
for the wbio.
- If the rbio and wbio parameters are different and the
wbio is the same as the previously set value and the old
rbio and wbio values were different to each other then one
reference is consumed for the rbio and one reference is consumed
for the wbio.
Because of this complexity, this function should be avoided; use
SSL_set0_rbio() and SSL_set0_wbio() instead.
SSL_set_bio(), SSL_set0_rbio() and SSL_set0_wbio() cannot
fail.
SSL_get_rbio(3), SSL_connect(3), SSL_accept(3),
SSL_shutdown(3), ssl(7), bio(7)
SSL_set0_rbio() and SSL_set0_wbio() were added in OpenSSL 1.1.0.
Copyright 2000-2018 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You
may not use this file except in compliance with the License. You can obtain
a copy in the file LICENSE in the source distribution or at
<https://www.openssl.org/source/license.html>.