BIO_do_accept (3)
Leading comments
Automatically generated by Pod::Man 4.07 (Pod::Simple 3.32) Standard preamble: ========================================================================
NAME
BIO_s_accept, BIO_set_accept_port, BIO_get_accept_port, BIO_new_accept, BIO_set_nbio_accept, BIO_set_accept_bios, BIO_set_bind_mode, BIO_get_bind_mode, BIO_do_accept - accept BIOSYNOPSIS
#include <openssl/bio.h> BIO_METHOD *BIO_s_accept(void); long BIO_set_accept_port(BIO *b, char *name); char *BIO_get_accept_port(BIO *b); BIO *BIO_new_accept(char *host_port); long BIO_set_nbio_accept(BIO *b, int n); long BIO_set_accept_bios(BIO *b, char *bio); long BIO_set_bind_mode(BIO *b, long mode); long BIO_get_bind_mode(BIO *b, long dummy); #define BIO_BIND_NORMAL 0 #define BIO_BIND_REUSEADDR_IF_UNUSED 1 #define BIO_BIND_REUSEADDR 2 int BIO_do_accept(BIO *b);
DESCRIPTION
BIO_s_accept() returns the acceptUsing accept BIOs,
Read and write operations on an accept
Accept BIOs support BIO_puts() but not BIO_gets().
If the close flag is set on an accept
Calling BIO_reset() on a accept
BIO_get_fd() and BIO_set_fd() can be called to retrieve or set the accept socket. See BIO_s_fd(3)
BIO_set_accept_port() uses the string name to set the accept port. The port is represented as a string of the form ``host:port'', where ``host'' is the interface to use and ``port'' is the port. The host can be can be ``*'' which is interpreted as meaning any interface; ``port'' has the same syntax as the port specified in BIO_set_conn_port() for connect BIOs, that is it can be a numerical port string or a string to lookup using getservbyname() and a string table.
BIO_new_accept() combines BIO_new() and BIO_set_accept_port() into a single call: that is it creates a new accept
BIO_set_nbio_accept() sets the accept socket to blocking mode (the default) if n is 0 or non blocking mode if n is 1.
BIO_set_accept_bios() can be used to set a chain of BIOs which will be duplicated and prepended to the chain when an incoming connection is received. This is useful if, for example, a buffering or
BIO_set_bind_mode() and BIO_get_bind_mode() set and retrieve the current bind mode. If
BIO_do_accept() serves two functions. When it is first called, after the accept
NOTES
When an acceptWhen a connection is established a new socket
If any additional BIOs have been set using BIO_set_accept_bios() then they are placed between the socket and the accept
If a server wishes to process multiple connections (as is normally the case) then the accept
connection = BIO_pop(accept);
After this call connection will contain a
If only a single connection will be processed it is possible to perform I/O using the accept
If the underlying accept socket is non-blocking and BIO_do_accept() is called to await an incoming connection it is possible for BIO_should_io_special() with the reason
BIO_set_accept_port(), BIO_get_accept_port(), BIO_set_nbio_accept(), BIO_set_accept_bios(), BIO_set_bind_mode(), BIO_get_bind_mode() and BIO_do_accept() are macros.
RETURN VALUES
EXAMPLE
This example accepts two connections on port 4444, sends messages down each and finally closes both down.
BIO *abio, *cbio, *cbio2; ERR_load_crypto_strings(); abio = BIO_new_accept("4444"); /* First call to BIO_accept() sets up accept BIO */ if(BIO_do_accept(abio) <= 0) { fprintf(stderr, "Error setting up accept\n"); ERR_print_errors_fp(stderr); exit(0); } /* Wait for incoming connection */ if(BIO_do_accept(abio) <= 0) { fprintf(stderr, "Error accepting connection\n"); ERR_print_errors_fp(stderr); exit(0); } fprintf(stderr, "Connection 1 established\n"); /* Retrieve BIO for connection */ cbio = BIO_pop(abio); BIO_puts(cbio, "Connection 1: Sending out Data on initial connection\n"); fprintf(stderr, "Sent out data on connection 1\n"); /* Wait for another connection */ if(BIO_do_accept(abio) <= 0) { fprintf(stderr, "Error accepting connection\n"); ERR_print_errors_fp(stderr); exit(0); } fprintf(stderr, "Connection 2 established\n"); /* Close accept BIO to refuse further connections */ cbio2 = BIO_pop(abio); BIO_free(abio); BIO_puts(cbio2, "Connection 2: Sending out Data on second\n"); fprintf(stderr, "Sent out data on connection 2\n"); BIO_puts(cbio, "Connection 1: Second connection established\n"); /* Close the two established connections */ BIO_free(cbio); BIO_free(cbio2);