NAME
BIO_s_bio, BIO_make_bio_pair, BIO_destroy_bio_pair, BIO_shutdown_wr, BIO_set_write_buf_size, BIO_get_write_buf_size, BIO_new_bio_pair, BIO_get_write_guarantee, BIO_ctrl_get_write_guarantee, BIO_get_read_request, BIO_ctrl_get_read_request, BIO_ctrl_reset_read_request — BIO pair BIOSYNOPSIS
#include <openssl/bio.h>BIO_s_bio(void);
#define BIO_make_bio_pair(b1, b2) \ (int)BIO_ctrl(b1, BIO_C_MAKE_BIO_PAIR, 0, b2) #define BIO_destroy_bio_pair(b) \ (int)BIO_ctrl(b, BIO_C_DESTROY_BIO_PAIR, 0, NULL) #define BIO_shutdown_wr(b) \ (int)BIO_ctrl(b, BIO_C_SHUTDOWN_WR, 0, NULL) #define BIO_set_write_buf_size(b, size) \ (int)BIO_ctrl(b, BIO_C_SET_WRITE_BUF_SIZE, size, NULL) #define BIO_get_write_buf_size(b, size) \ (size_t)BIO_ctrl(b, BIO_C_GET_WRITE_BUF_SIZE, size, NULL)
int
BIO_new_bio_pair(BIO **bio1, size_t writebuf1, BIO **bio2, size_t writebuf2);
#define BIO_get_write_guarantee(b) \ (int)BIO_ctrl(b, BIO_C_GET_WRITE_GUARANTEE, 0, NULL)
size_t
BIO_ctrl_get_write_guarantee(BIO *b);
#define BIO_get_read_request(b) \ (int)BIO_ctrl(b, BIO_C_GET_READ_REQUEST, 0, NULL)
size_t
BIO_ctrl_get_read_request(BIO *b);
BIO_ctrl_reset_read_request(BIO *b);
DESCRIPTION
BIO_s_bio() returns the method for a BIO pair. A BIO pair is a pair of source/sink BIOs where data written to either half of the pair is buffered and can be read from the other half. Both halves must usually be handled by the same application thread since no locking is done on the internal data structures.RETURN VALUES
BIO_new_bio_pair() returns 1 on success, with the new BIOs available in bio1 and bio2, or 0 on failure, with NULL pointers stored into the locations for bio1 and bio2. Check the error stack for more information.NOTES
Both halves of a BIO pair should be freed. Even if one half is implicitly freed due to a BIO_free_all(3) or SSL_free(3) call, the other half still needs to be freed.EXAMPLE
The BIO pair can be used to have full control over the network access of an application. The application can call select(2) on the socket as required without having to go through the SSL-interface.BIO *internal_bio, *network_bio; ... BIO_new_bio_pair(internal_bio, 0, network_bio, 0); SSL_set_bio(ssl, internal_bio, internal_bio); SSL_operations(); ... application | TLS-engine | | +----------> SSL_operations() | /\ || | || \/ | BIO-pair (internal_bio) +----------< BIO-pair (network_bio) | | socket | ... SSL_free(ssl); /* implicitly frees internal_bio */ BIO_free(network_bio); ...