=pod

=head1 NAME

SSL_free_buffers, SSL_alloc_buffers - manage SSL structure buffers

=head1 SYNOPSIS

 #include <openssl/ssl.h>

 int SSL_free_buffers(SSL *ssl);
 int SSL_alloc_buffers(SSL *ssl);

=head1 DESCRIPTION

SSL_free_buffers() frees the read and write buffers of the given B<ssl>.
SSL_alloc_buffers() allocates the read and write buffers of the given B<ssl>.

The B<SSL_MODE_RELEASE_BUFFERS> mode releases read or write buffers whenever
the buffers have been drained. These functions allow applications to manually
control when buffers are freed and allocated.

After freeing the buffers, the buffers are automatically reallocated upon a
new read or write. The SSL_alloc_buffers() does not need to be called, but
can be used to make sure the buffers are pre-allocated. This can be used to
avoid allocation during data processing or with CRYPTO_set_mem_functions()
to control where and how buffers are allocated.

=head1 RETURN VALUES

The following return values can occur:

=over 4

=item 0 (Failure)

The SSL_free_buffers() function returns 0 when there is pending data to be
read or written. The SSL_alloc_buffers() function returns 0 when there is
an allocation failure.

=item 1 (Success)

The SSL_free_buffers() function returns 1 if the buffers have been freed. This
value is also returned if the buffers had been freed before calling
SSL_free_buffers().
The SSL_alloc_buffers() function returns 1 if the buffers have been allocated.
This value is also returned if the buffers had been allocated before calling
SSL_alloc_buffers().

=back

=head1 SEE ALSO

L<ssl(7)>,
L<SSL_free(3)>, L<SSL_clear(3)>,
L<SSL_new(3)>, L<SSL_CTX_set_mode(3)>,
L<CRYPTO_set_mem_functions(3)>

=head1 COPYRIGHT

Copyright 2017 The OpenSSL Project Authors. All Rights Reserved.

Licensed under the Apache License 2.0 (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
L<https://www.openssl.org/source/license.html>.

=cut
