| 
									
										
										
										
											2000-09-09 09:01:35 +08:00
										 |  |  | =pod | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =head1 NAME | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-20 16:56:18 +08:00
										 |  |  | BIO_read_ex, BIO_write_ex, BIO_read, BIO_write, BIO_gets, BIO_puts | 
					
						
							|  |  |  | - BIO I/O functions | 
					
						
							| 
									
										
										
										
											2000-09-09 09:01:35 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =head1 SYNOPSIS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  #include <openssl/bio.h> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-29 00:53:00 +08:00
										 |  |  |  int BIO_read_ex(BIO *b, void *data, size_t dlen, size_t *readbytes); | 
					
						
							|  |  |  |  int BIO_write_ex(BIO *b, const void *data, size_t dlen, size_t *written); | 
					
						
							| 
									
										
										
										
											2016-10-20 16:56:18 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-29 00:53:00 +08:00
										 |  |  |  int BIO_read(BIO *b, void *data, int dlen); | 
					
						
							| 
									
										
										
										
											2016-10-20 16:56:18 +08:00
										 |  |  |  int BIO_gets(BIO *b, char *buf, int size); | 
					
						
							| 
									
										
										
										
											2016-10-29 00:53:00 +08:00
										 |  |  |  int BIO_write(BIO *b, const void *data, int dlen); | 
					
						
							| 
									
										
										
										
											2016-10-20 16:56:18 +08:00
										 |  |  |  int BIO_puts(BIO *b, const char *buf); | 
					
						
							| 
									
										
										
										
											2000-09-09 09:01:35 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =head1 DESCRIPTION | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-29 00:53:00 +08:00
										 |  |  | BIO_read_ex() attempts to read B<dlen> bytes from BIO B<b> and places the data | 
					
						
							|  |  |  | in B<data>. If any bytes were successfully read then the number of bytes read is | 
					
						
							|  |  |  | stored in B<*readbytes>. | 
					
						
							| 
									
										
										
										
											2016-10-20 16:56:18 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-29 00:53:00 +08:00
										 |  |  | BIO_write_ex() attempts to write B<dlen> bytes from B<data> to BIO B<b>. If | 
					
						
							| 
									
										
										
										
											2016-10-20 16:56:18 +08:00
										 |  |  | successful then the number of bytes written is stored in B<*written>. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-09-09 09:01:35 +08:00
										 |  |  | 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 | 
					
						
							| 
									
										
										
										
											2016-10-29 00:53:00 +08:00
										 |  |  | from the BIO of maximum length B<size-1>. There are exceptions to this, | 
					
						
							| 
									
										
										
										
											2016-03-30 03:56:44 +08:00
										 |  |  | however; for example, BIO_gets() on a digest BIO will calculate and | 
					
						
							| 
									
										
										
										
											2000-09-09 09:01:35 +08:00
										 |  |  | return the digest and other BIOs may not support BIO_gets() at all. | 
					
						
							| 
									
										
										
										
											2016-11-23 16:33:55 +08:00
										 |  |  | The returned string is always NUL-terminated and the '\n' is preserved | 
					
						
							|  |  |  | if present in the input data. | 
					
						
							| 
									
										
										
										
											2000-09-09 09:01:35 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | BIO_write() attempts to write B<len> bytes from B<buf> to BIO B<b>. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-30 03:56:44 +08:00
										 |  |  | BIO_puts() attempts to write a NUL-terminated string B<buf> to BIO B<b>. | 
					
						
							| 
									
										
										
										
											2000-09-09 09:01:35 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =head1 RETURN VALUES | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-20 16:56:18 +08:00
										 |  |  | BIO_read_ex() and BIO_write_ex() return 1 if data was successfully read or | 
					
						
							|  |  |  | written, and 0 otherwise. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | All other functions return either the amount of data successfully read or | 
					
						
							| 
									
										
										
										
											2000-09-09 09:01:35 +08:00
										 |  |  | written (if the return value is positive) or that no data was successfully | 
					
						
							| 
									
										
										
										
											2000-09-12 09:56:56 +08:00
										 |  |  | read or written if the result is 0 or -1. If the return value is -2 then | 
					
						
							| 
									
										
										
										
											2016-03-30 03:56:44 +08:00
										 |  |  | the operation is not implemented in the specific BIO type.  The trailing | 
					
						
							|  |  |  | NUL is not included in the length returned by BIO_gets(). | 
					
						
							| 
									
										
										
										
											2000-09-09 09:01:35 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =head1 NOTES | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-09-12 09:56:56 +08:00
										 |  |  | A 0 or -1 return is not necessarily an indication of an error. In | 
					
						
							| 
									
										
										
										
											2020-07-17 18:31:26 +08:00
										 |  |  | particular when the source/sink is nonblocking or of a certain type | 
					
						
							| 
									
										
										
										
											2000-09-09 09:01:35 +08:00
										 |  |  | it may merely be an indication that no data is currently available and that | 
					
						
							| 
									
										
										
										
											2000-09-13 08:20:24 +08:00
										 |  |  | the application should retry the operation later. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | One technique sometimes used with blocking sockets is to use a system call | 
					
						
							| 
									
										
										
										
											2000-09-16 23:39:28 +08:00
										 |  |  | (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 | 
					
						
							| 
									
										
										
										
											2000-09-13 08:20:24 +08:00
										 |  |  | 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. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-18 03:21:33 +08:00
										 |  |  | See L<BIO_should_retry(3)> for details of how to | 
					
						
							| 
									
										
										
										
											2000-09-13 08:20:24 +08:00
										 |  |  | determine the cause of a retry and other I/O issues. | 
					
						
							| 
									
										
										
										
											2000-09-09 09:01:35 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | If the BIO_gets() function is not supported by a BIO then it possible to | 
					
						
							| 
									
										
										
										
											2015-08-18 03:21:33 +08:00
										 |  |  | work around this by adding a buffering BIO L<BIO_f_buffer(3)> | 
					
						
							| 
									
										
										
										
											2000-09-09 09:01:35 +08:00
										 |  |  | to the chain. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =head1 SEE ALSO | 
					
						
							| 
									
										
										
										
											2000-09-16 09:32:42 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-18 03:21:33 +08:00
										 |  |  | L<BIO_should_retry(3)> | 
					
						
							| 
									
										
										
										
											2000-09-09 09:01:35 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-12 16:26:13 +08:00
										 |  |  | =head1 HISTORY | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | BIO_gets() on 1.1.0 and older when called on BIO_fd() based BIO does not | 
					
						
							|  |  |  | keep the '\n' at the end of the line in the buffer. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-18 23:44:05 +08:00
										 |  |  | =head1 COPYRIGHT | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-06 20:22:30 +08:00
										 |  |  | Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved. | 
					
						
							| 
									
										
										
										
											2016-05-18 23:44:05 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-06 21:04:44 +08:00
										 |  |  | Licensed under the Apache License 2.0 (the "License").  You may not use | 
					
						
							| 
									
										
										
										
											2016-05-18 23:44:05 +08:00
										 |  |  | 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 |