1 .\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32
4 .\" ========================================================================
5 .de Sh \" Subsection heading
13 .de Sp \" Vertical space (when we can't use .PP)
17 .de Vb \" Begin verbatim text
22 .de Ve \" End verbatim text
26 .\" Set up some character translations and predefined strings. \*(-- will
27 .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
28 .\" double quote, and \*(R" will give a right double quote. | will give a
29 .\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
30 .\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
31 .\" expand to `' in nroff, nothing in troff, for use with C<>.
33 .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
37 . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
38 . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
51 .\" If the F register is turned on, we'll generate index entries on stderr for
52 .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
53 .\" entries marked with X<> in POD. Of course, you'll have to process the
54 .\" output yourself in some meaningful fashion.
57 . tm Index:\\$1\t\\n%\t"\\$2"
63 .\" For nroff, turn off justification. Always turn off hyphenation; it makes
64 .\" way too many mistakes in technical documents.
68 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
69 .\" Fear. Run. Save yourself. No user-serviceable parts.
70 . \" fudge factors for nroff and troff
79 . ds #H ((1u-(\\\\n(.fu%2u))*.13m)
85 . \" simple accents for nroff and troff
95 . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
96 . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
97 . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
98 . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
99 . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
100 . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
102 . \" troff and (daisy-wheel) nroff accents
103 .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
104 .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
105 .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
106 .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
107 .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
108 .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
109 .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
110 .ds ae a\h'-(\w'a'u*4/10)'e
111 .ds Ae A\h'-(\w'A'u*4/10)'E
112 . \" corrections for vroff
113 .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
114 .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
115 . \" for low resolution devices (crt and lpr)
116 .if \n(.H>23 .if \n(.V>19 \
129 .\" ========================================================================
131 .IX Title "BIO_s_accept 3"
132 .TH BIO_s_accept 3 "2009-07-23" "0.9.8k" "OpenSSL"
134 BIO_s_accept, BIO_set_accept_port, BIO_get_accept_port,
135 BIO_set_nbio_accept, BIO_set_accept_bios, BIO_set_bind_mode,
136 BIO_get_bind_mode, BIO_do_accept \- accept BIO
138 .IX Header "SYNOPSIS"
140 \& #include <openssl/bio.h>
144 \& BIO_METHOD *BIO_s_accept(void);
148 \& long BIO_set_accept_port(BIO *b, char *name);
149 \& char *BIO_get_accept_port(BIO *b);
153 \& BIO *BIO_new_accept(char *host_port);
157 \& long BIO_set_nbio_accept(BIO *b, int n);
158 \& long BIO_set_accept_bios(BIO *b, char *bio);
162 \& long BIO_set_bind_mode(BIO *b, long mode);
163 \& long BIO_get_bind_mode(BIO *b, long dummy);
167 \& #define BIO_BIND_NORMAL 0
168 \& #define BIO_BIND_REUSEADDR_IF_UNUSED 1
169 \& #define BIO_BIND_REUSEADDR 2
173 \& int BIO_do_accept(BIO *b);
176 .IX Header "DESCRIPTION"
177 \&\fIBIO_s_accept()\fR returns the accept \s-1BIO\s0 method. This is a wrapper
178 round the platform's \s-1TCP/IP\s0 socket accept routines.
180 Using accept BIOs, \s-1TCP/IP\s0 connections can be accepted and data
181 transferred using only \s-1BIO\s0 routines. In this way any platform
182 specific operations are hidden by the \s-1BIO\s0 abstraction.
184 Read and write operations on an accept \s-1BIO\s0 will perform I/O
185 on the underlying connection. If no connection is established
186 and the port (see below) is set up properly then the \s-1BIO\s0
187 waits for an incoming connection.
189 Accept BIOs support \fIBIO_puts()\fR but not \fIBIO_gets()\fR.
191 If the close flag is set on an accept \s-1BIO\s0 then any active
192 connection on that chain is shutdown and the socket closed when
193 the \s-1BIO\s0 is freed.
195 Calling \fIBIO_reset()\fR on a accept \s-1BIO\s0 will close any active
196 connection and reset the \s-1BIO\s0 into a state where it awaits another
199 \&\fIBIO_get_fd()\fR and \fIBIO_set_fd()\fR can be called to retrieve or set
200 the accept socket. See \fIBIO_s_fd\fR\|(3)
202 \&\fIBIO_set_accept_port()\fR uses the string \fBname\fR to set the accept
203 port. The port is represented as a string of the form \*(L"host:port\*(R",
204 where \*(L"host\*(R" is the interface to use and \*(L"port\*(R" is the port.
205 Either or both values can be \*(L"*\*(R" which is interpreted as meaning
206 any interface or port respectively. \*(L"port\*(R" has the same syntax
207 as the port specified in \fIBIO_set_conn_port()\fR for connect BIOs,
208 that is it can be a numerical port string or a string to lookup
209 using \fIgetservbyname()\fR and a string table.
211 \&\fIBIO_new_accept()\fR combines \fIBIO_new()\fR and \fIBIO_set_accept_port()\fR into
212 a single call: that is it creates a new accept \s-1BIO\s0 with port
215 \&\fIBIO_set_nbio_accept()\fR sets the accept socket to blocking mode
216 (the default) if \fBn\fR is 0 or non blocking mode if \fBn\fR is 1.
218 \&\fIBIO_set_accept_bios()\fR can be used to set a chain of BIOs which
219 will be duplicated and prepended to the chain when an incoming
220 connection is received. This is useful if, for example, a
221 buffering or \s-1SSL\s0 \s-1BIO\s0 is required for each connection. The
222 chain of BIOs must not be freed after this call, they will
223 be automatically freed when the accept \s-1BIO\s0 is freed.
225 \&\fIBIO_set_bind_mode()\fR and \fIBIO_get_bind_mode()\fR set and retrieve
226 the current bind mode. If \s-1BIO_BIND_NORMAL\s0 (the default) is set
227 then another socket cannot be bound to the same port. If
228 \&\s-1BIO_BIND_REUSEADDR\s0 is set then other sockets can bind to the
229 same port. If \s-1BIO_BIND_REUSEADDR_IF_UNUSED\s0 is set then and
230 attempt is first made to use \s-1BIO_BIN_NORMAL\s0, if this fails
231 and the port is not in use then a second attempt is made
232 using \s-1BIO_BIND_REUSEADDR\s0.
234 \&\fIBIO_do_accept()\fR serves two functions. When it is first
235 called, after the accept \s-1BIO\s0 has been setup, it will attempt
236 to create the accept socket and bind an address to it. Second
237 and subsequent calls to \fIBIO_do_accept()\fR will await an incoming
238 connection, or request a retry in non blocking mode.
241 When an accept \s-1BIO\s0 is at the end of a chain it will await an
242 incoming connection before processing I/O calls. When an accept
243 \&\s-1BIO\s0 is not at then end of a chain it passes I/O calls to the next
244 \&\s-1BIO\s0 in the chain.
246 When a connection is established a new socket \s-1BIO\s0 is created for
247 the connection and appended to the chain. That is the chain is now
248 accept\->socket. This effectively means that attempting I/O on
249 an initial accept socket will await an incoming connection then
252 If any additional BIOs have been set using \fIBIO_set_accept_bios()\fR
253 then they are placed between the socket and the accept \s-1BIO\s0,
254 that is the chain will be accept\->otherbios\->socket.
256 If a server wishes to process multiple connections (as is normally
257 the case) then the accept \s-1BIO\s0 must be made available for further
258 incoming connections. This can be done by waiting for a connection and
262 \& connection = BIO_pop(accept);
265 After this call \fBconnection\fR will contain a \s-1BIO\s0 for the recently
266 established connection and \fBaccept\fR will now be a single \s-1BIO\s0
267 again which can be used to await further incoming connections.
268 If no further connections will be accepted the \fBaccept\fR can
269 be freed using \fIBIO_free()\fR.
271 If only a single connection will be processed it is possible to
272 perform I/O using the accept \s-1BIO\s0 itself. This is often undesirable
273 however because the accept \s-1BIO\s0 will still accept additional incoming
274 connections. This can be resolved by using \fIBIO_pop()\fR (see above)
275 and freeing up the accept \s-1BIO\s0 after the initial connection.
277 If the underlying accept socket is non-blocking and \fIBIO_do_accept()\fR is
278 called to await an incoming connection it is possible for
279 \&\fIBIO_should_io_special()\fR with the reason \s-1BIO_RR_ACCEPT\s0. If this happens
280 then it is an indication that an accept attempt would block: the application
281 should take appropriate action to wait until the underlying socket has
282 accepted a connection and retry the call.
284 \&\fIBIO_set_accept_port()\fR, \fIBIO_get_accept_port()\fR, \fIBIO_set_nbio_accept()\fR,
285 \&\fIBIO_set_accept_bios()\fR, \fIBIO_set_bind_mode()\fR, \fIBIO_get_bind_mode()\fR and
286 \&\fIBIO_do_accept()\fR are macros.
288 .IX Header "RETURN VALUES"
292 This example accepts two connections on port 4444, sends messages
293 down each and finally closes both down.
296 \& BIO *abio, *cbio, *cbio2;
297 \& ERR_load_crypto_strings();
298 \& abio = BIO_new_accept("4444");
302 \& /* First call to BIO_accept() sets up accept BIO */
303 \& if(BIO_do_accept(abio) <= 0) {
304 \& fprintf(stderr, "Error setting up accept\en");
305 \& ERR_print_errors_fp(stderr);
311 \& /* Wait for incoming connection */
312 \& if(BIO_do_accept(abio) <= 0) {
313 \& fprintf(stderr, "Error accepting connection\en");
314 \& ERR_print_errors_fp(stderr);
317 \& fprintf(stderr, "Connection 1 established\en");
318 \& /* Retrieve BIO for connection */
319 \& cbio = BIO_pop(abio);
320 \& BIO_puts(cbio, "Connection 1: Sending out Data on initial connection\en");
321 \& fprintf(stderr, "Sent out data on connection 1\en");
322 \& /* Wait for another connection */
323 \& if(BIO_do_accept(abio) <= 0) {
324 \& fprintf(stderr, "Error accepting connection\en");
325 \& ERR_print_errors_fp(stderr);
328 \& fprintf(stderr, "Connection 2 established\en");
329 \& /* Close accept BIO to refuse further connections */
330 \& cbio2 = BIO_pop(abio);
332 \& BIO_puts(cbio2, "Connection 2: Sending out Data on second\en");
333 \& fprintf(stderr, "Sent out data on connection 2\en");
337 \& BIO_puts(cbio, "Connection 1: Second connection established\en");
338 \& /* Close the two established connections */
343 .IX Header "SEE ALSO"