=pod

=head1 NAME

BIO_read, BIO_write, BIO_gets, BIO_puts - BIO I/O functions

=head1 SYNOPSIS

 #include <openssl/bio.h>

 int    BIO_read(BIO *b, void *buf, int len);
 int    BIO_gets(BIO *b, char *buf, int size);
 int    BIO_write(BIO *b, const void *buf, int len);
 int    BIO_puts(BIO *b, const char *buf);

=head1 DESCRIPTION

BIO_read() attempts to read B<len> bytes from BIO B<b> and places
the data in B<buf>.

BIO_gets() performs the BIOs "gets" operation and places the data
in B<buf>. Usually this operation will attempt to read a line of data
from the BIO of maximum length B<len-1>. There are exceptions to this,
however; for example, BIO_gets() on a digest BIO will calculate and
return the digest and other BIOs may not support BIO_gets() at all.
The returned string is always NUL-terminated.

BIO_write() attempts to write B<len> bytes from B<buf> to BIO B<b>.

BIO_puts() attempts to write a NUL-terminated string B<buf> to BIO B<b>.

=head1 RETURN VALUES

All these functions return either the amount of data successfully read or
written (if the return value is positive) or that no data was successfully
read or written if the result is 0 or -1. If the return value is -2 then
the operation is not implemented in the specific BIO type.  The trailing
NUL is not included in the length returned by BIO_gets().

=head1 NOTES

A 0 or -1 return is not necessarily an indication of an error. In
particular when the source/sink is non-blocking or of a certain type
it may merely be an indication that no data is currently available and that
the application should retry the operation later.

One technique sometimes used with blocking sockets is to use a system call
(such as select(), poll() or equivalent) to determine when data is available
and then call read() to read the data. The equivalent with BIOs (that is call
select() on the underlying I/O structure and then call BIO_read() to
read the data) should B<not> be used because a single call to BIO_read()
can cause several reads (and writes in the case of SSL BIOs) on the underlying
I/O structure and may block as a result. Instead select() (or equivalent)
should be combined with non blocking I/O so successive reads will request
a retry instead of blocking.

See L<BIO_should_retry(3)> for details of how to
determine the cause of a retry and other I/O issues.

If the BIO_gets() function is not supported by a BIO then it possible to
work around this by adding a buffering BIO L<BIO_f_buffer(3)>
to the chain.

=head1 SEE ALSO

L<BIO_should_retry(3)>

=head1 COPYRIGHT

Copyright 2000-2016 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
L<https://www.openssl.org/source/license.html>.

=cut
