BIO_new, BIO_set, BIO_free, BIO_vfree, BIO_free_all - BIO allocation
and freeing functions
BIO * BIO_new(
BIO_METHOD *type ); int BIO_set(
BIO_METHOD *type ); int BIO_free(
BIO *a ); void BIO_vfree(
BIO *a ); void BIO_free_all(
BIO *a );
The BIO_new() function returns a new BIO using method type.
The BIO_set() function sets the method of an already existing BIO.
The BIO_free() function frees up a single BIO. The BIO_vfree()function
also frees up a single BIO but it does not return a value. Calling
BIO_free() functon might also have some effect on the underlying I/O
structure, for example it may close the file being referred to under
certain circumstances. For more details see the individual BIO_METHOD
The BIO_free_all() function frees up an entire BIO chain. It does not
halt if an error occurs freeing up an individual BIO in the chain.
Some BIOs, such as memory BIOs, can be used immediately after calling
BIO_new(). Others, such as file BIOs, need some additional initializa‐
tion, and frequently a utility function exists to create and initialize
If the BIO_free() function is called on a BIO chain it will only free
one BIO, resulting in a memory leak.
Calling BIO_free_all() a single BIO has the same effect as calling
BIO_free() on it other than the discarded return value.
Usually the type argument is supplied by a function which returns a
pointer to a BIO_METHOD. There is a naming convention for such func‐
tions: a source/sink BIO is usually called BIO_s_*(), and a filter is
called BIO BIO_f_*().
The BIO_new() function returns a newly created BIO or NULL if the call
The BIO_set() and BIO_free() functions return 1 for success and 0 for
The BIO_free_all() and BIO_vfree() functions do not return values.
Create a memory BIO: BIO *mem = BIO_new(BIO_s_mem());