=pod

=head1 NAME

SSL_CTX_set_read_ahead, SSL_CTX_set_default_read_ahead, SSL_CTX_get_read_ahead,
SSL_CTX_get_default_read_ahead, SSL_set_read_ahead, SSL_get_read_ahead
- manage whether to read as many input bytes as possible

=head1 SYNOPSIS

 #include <openssl/ssl.h>

 int SSL_get_read_ahead(const SSL *s);
 void SSL_set_read_ahead(SSL *s, int yes);

 #define SSL_CTX_get_default_read_ahead(ctx)
 #define SSL_CTX_set_default_read_ahead(ctx,m)
 #define SSL_CTX_get_read_ahead(ctx)
 #define SSL_CTX_set_read_ahead(ctx,m)

=head1 DESCRIPTION

SSL_CTX_set_read_ahead() and SSL_set_read_ahead() set whether we should read as
many input bytes as possible (for non-blocking reads) or not. For example if
B<x> bytes are currently required by OpenSSL, but B<y> bytes are available from
the underlying BIO (where B<y> > B<x>), then OpenSSL will read all B<y> bytes
into its buffer (providing that the buffer is large enough) if reading ahead is
on, or B<x> bytes otherwise. The parameter B<yes> or B<m> should be 0 to ensure
reading ahead is off, or non zero otherwise.

SSL_CTX_set_default_read_ahead is a synonym for SSL_CTX_set_read_ahead, and
SSL_CTX_get_default_read_ahead is a synonym for SSL_CTX_get_read_ahead.

SSL_CTX_get_read_ahead() and SSL_get_read_ahead() indicate whether reading
ahead has been set or not.

=head1 NOTES

These functions have no impact when used with DTLS. The return values for
SSL_CTX_get_read_head() and SSL_get_read_ahead() are undefined for DTLS.

=head1 RETURN VALUES

SSL_get_read_ahead and SSL_CTX_get_read_ahead return 0 if reading ahead is off,
and non zero otherwise.

=head1 SEE ALSO

L<ssl(3)|ssl(3)>

=cut
