]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - secure/lib/libcrypto/man/man3/BIO_s_accept.3
Merge OpenSSL 1.1.1f.
[FreeBSD/FreeBSD.git] / secure / lib / libcrypto / man / man3 / BIO_s_accept.3
1 .\" Automatically generated by Pod::Man 4.11 (Pod::Simple 3.40)
2 .\"
3 .\" Standard preamble:
4 .\" ========================================================================
5 .de Sp \" Vertical space (when we can't use .PP)
6 .if t .sp .5v
7 .if n .sp
8 ..
9 .de Vb \" Begin verbatim text
10 .ft CW
11 .nf
12 .ne \\$1
13 ..
14 .de Ve \" End verbatim text
15 .ft R
16 .fi
17 ..
18 .\" Set up some character translations and predefined strings.  \*(-- will
19 .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
20 .\" double quote, and \*(R" will give a right double quote.  \*(C+ will
21 .\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
22 .\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
23 .\" nothing in troff, for use with C<>.
24 .tr \(*W-
25 .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
26 .ie n \{\
27 .    ds -- \(*W-
28 .    ds PI pi
29 .    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
30 .    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
31 .    ds L" ""
32 .    ds R" ""
33 .    ds C` ""
34 .    ds C' ""
35 'br\}
36 .el\{\
37 .    ds -- \|\(em\|
38 .    ds PI \(*p
39 .    ds L" ``
40 .    ds R" ''
41 .    ds C`
42 .    ds C'
43 'br\}
44 .\"
45 .\" Escape single quotes in literal strings from groff's Unicode transform.
46 .ie \n(.g .ds Aq \(aq
47 .el       .ds Aq '
48 .\"
49 .\" If the F register is >0, we'll generate index entries on stderr for
50 .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
51 .\" entries marked with X<> in POD.  Of course, you'll have to process the
52 .\" output yourself in some meaningful fashion.
53 .\"
54 .\" Avoid warning from groff about undefined register 'F'.
55 .de IX
56 ..
57 .nr rF 0
58 .if \n(.g .if rF .nr rF 1
59 .if (\n(rF:(\n(.g==0)) \{\
60 .    if \nF \{\
61 .        de IX
62 .        tm Index:\\$1\t\\n%\t"\\$2"
63 ..
64 .        if !\nF==2 \{\
65 .            nr % 0
66 .            nr F 2
67 .        \}
68 .    \}
69 .\}
70 .rr rF
71 .\"
72 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
73 .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
74 .    \" fudge factors for nroff and troff
75 .if n \{\
76 .    ds #H 0
77 .    ds #V .8m
78 .    ds #F .3m
79 .    ds #[ \f1
80 .    ds #] \fP
81 .\}
82 .if t \{\
83 .    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
84 .    ds #V .6m
85 .    ds #F 0
86 .    ds #[ \&
87 .    ds #] \&
88 .\}
89 .    \" simple accents for nroff and troff
90 .if n \{\
91 .    ds ' \&
92 .    ds ` \&
93 .    ds ^ \&
94 .    ds , \&
95 .    ds ~ ~
96 .    ds /
97 .\}
98 .if t \{\
99 .    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
100 .    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
101 .    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
102 .    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
103 .    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
104 .    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
105 .\}
106 .    \" troff and (daisy-wheel) nroff accents
107 .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
108 .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
109 .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
110 .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
111 .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
112 .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
113 .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
114 .ds ae a\h'-(\w'a'u*4/10)'e
115 .ds Ae A\h'-(\w'A'u*4/10)'E
116 .    \" corrections for vroff
117 .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
118 .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
119 .    \" for low resolution devices (crt and lpr)
120 .if \n(.H>23 .if \n(.V>19 \
121 \{\
122 .    ds : e
123 .    ds 8 ss
124 .    ds o a
125 .    ds d- d\h'-1'\(ga
126 .    ds D- D\h'-1'\(hy
127 .    ds th \o'bp'
128 .    ds Th \o'LP'
129 .    ds ae ae
130 .    ds Ae AE
131 .\}
132 .rm #[ #] #H #V #F C
133 .\" ========================================================================
134 .\"
135 .IX Title "BIO_S_ACCEPT 3"
136 .TH BIO_S_ACCEPT 3 "2020-03-31" "1.1.1f" "OpenSSL"
137 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
138 .\" way too many mistakes in technical documents.
139 .if n .ad l
140 .nh
141 .SH "NAME"
142 BIO_s_accept, BIO_set_accept_name, BIO_set_accept_port, BIO_get_accept_name, BIO_get_accept_port, BIO_new_accept, BIO_set_nbio_accept, BIO_set_accept_bios, BIO_get_peer_name, BIO_get_peer_port, BIO_get_accept_ip_family, BIO_set_accept_ip_family, BIO_set_bind_mode, BIO_get_bind_mode, BIO_do_accept \- accept BIO
143 .SH "SYNOPSIS"
144 .IX Header "SYNOPSIS"
145 .Vb 1
146 \& #include <openssl/bio.h>
147 \&
148 \& const BIO_METHOD *BIO_s_accept(void);
149 \&
150 \& long BIO_set_accept_name(BIO *b, char *name);
151 \& char *BIO_get_accept_name(BIO *b);
152 \&
153 \& long BIO_set_accept_port(BIO *b, char *port);
154 \& char *BIO_get_accept_port(BIO *b);
155 \&
156 \& BIO *BIO_new_accept(char *host_port);
157 \&
158 \& long BIO_set_nbio_accept(BIO *b, int n);
159 \& long BIO_set_accept_bios(BIO *b, char *bio);
160 \&
161 \& char *BIO_get_peer_name(BIO *b);
162 \& char *BIO_get_peer_port(BIO *b);
163 \& long BIO_get_accept_ip_family(BIO *b);
164 \& long BIO_set_accept_ip_family(BIO *b, long family);
165 \&
166 \& long BIO_set_bind_mode(BIO *b, long mode);
167 \& long BIO_get_bind_mode(BIO *b);
168 \&
169 \& int BIO_do_accept(BIO *b);
170 .Ve
171 .SH "DESCRIPTION"
172 .IX Header "DESCRIPTION"
173 \&\fBBIO_s_accept()\fR returns the accept \s-1BIO\s0 method. This is a wrapper
174 round the platform's \s-1TCP/IP\s0 socket accept routines.
175 .PP
176 Using accept BIOs, \s-1TCP/IP\s0 connections can be accepted and data
177 transferred using only \s-1BIO\s0 routines. In this way any platform
178 specific operations are hidden by the \s-1BIO\s0 abstraction.
179 .PP
180 Read and write operations on an accept \s-1BIO\s0 will perform I/O
181 on the underlying connection. If no connection is established
182 and the port (see below) is set up properly then the \s-1BIO\s0
183 waits for an incoming connection.
184 .PP
185 Accept BIOs support \fBBIO_puts()\fR but not \fBBIO_gets()\fR.
186 .PP
187 If the close flag is set on an accept \s-1BIO\s0 then any active
188 connection on that chain is shutdown and the socket closed when
189 the \s-1BIO\s0 is freed.
190 .PP
191 Calling \fBBIO_reset()\fR on an accept \s-1BIO\s0 will close any active
192 connection and reset the \s-1BIO\s0 into a state where it awaits another
193 incoming connection.
194 .PP
195 \&\fBBIO_get_fd()\fR and \fBBIO_set_fd()\fR can be called to retrieve or set
196 the accept socket. See \fBBIO_s_fd\fR\|(3)
197 .PP
198 \&\fBBIO_set_accept_name()\fR uses the string \fBname\fR to set the accept
199 name. The name is represented as a string of the form \*(L"host:port\*(R",
200 where \*(L"host\*(R" is the interface to use and \*(L"port\*(R" is the port.
201 The host can be \*(L"*\*(R" or empty which is interpreted as meaning
202 any interface.  If the host is an IPv6 address, it has to be
203 enclosed in brackets, for example \*(L"[::1]:https\*(R".  \*(L"port\*(R" has the
204 same syntax as the port specified in \fBBIO_set_conn_port()\fR for
205 connect BIOs, that is it can be a numerical port string or a
206 string to lookup using \fBgetservbyname()\fR and a string table.
207 .PP
208 \&\fBBIO_set_accept_port()\fR uses the string \fBport\fR to set the accept
209 port.  \*(L"port\*(R" has the same syntax as the port specified in
210 \&\fBBIO_set_conn_port()\fR for connect BIOs, that is it can be a numerical
211 port string or a string to lookup using \fBgetservbyname()\fR and a string
212 table.
213 .PP
214 \&\fBBIO_new_accept()\fR combines \fBBIO_new()\fR and \fBBIO_set_accept_name()\fR into
215 a single call: that is it creates a new accept \s-1BIO\s0 with port
216 \&\fBhost_port\fR.
217 .PP
218 \&\fBBIO_set_nbio_accept()\fR sets the accept socket to blocking mode
219 (the default) if \fBn\fR is 0 or non blocking mode if \fBn\fR is 1.
220 .PP
221 \&\fBBIO_set_accept_bios()\fR can be used to set a chain of BIOs which
222 will be duplicated and prepended to the chain when an incoming
223 connection is received. This is useful if, for example, a
224 buffering or \s-1SSL BIO\s0 is required for each connection. The
225 chain of BIOs must not be freed after this call, they will
226 be automatically freed when the accept \s-1BIO\s0 is freed.
227 .PP
228 \&\fBBIO_set_bind_mode()\fR and \fBBIO_get_bind_mode()\fR set and retrieve
229 the current bind mode. If \fB\s-1BIO_BIND_NORMAL\s0\fR (the default) is set
230 then another socket cannot be bound to the same port. If
231 \&\fB\s-1BIO_BIND_REUSEADDR\s0\fR is set then other sockets can bind to the
232 same port. If \fB\s-1BIO_BIND_REUSEADDR_IF_UNUSED\s0\fR is set then and
233 attempt is first made to use \s-1BIO_BIN_NORMAL,\s0 if this fails
234 and the port is not in use then a second attempt is made
235 using \fB\s-1BIO_BIND_REUSEADDR\s0\fR.
236 .PP
237 \&\fBBIO_do_accept()\fR serves two functions. When it is first
238 called, after the accept \s-1BIO\s0 has been setup, it will attempt
239 to create the accept socket and bind an address to it. Second
240 and subsequent calls to \fBBIO_do_accept()\fR will await an incoming
241 connection, or request a retry in non blocking mode.
242 .SH "NOTES"
243 .IX Header "NOTES"
244 When an accept \s-1BIO\s0 is at the end of a chain it will await an
245 incoming connection before processing I/O calls. When an accept
246 \&\s-1BIO\s0 is not at then end of a chain it passes I/O calls to the next
247 \&\s-1BIO\s0 in the chain.
248 .PP
249 When a connection is established a new socket \s-1BIO\s0 is created for
250 the connection and appended to the chain. That is the chain is now
251 accept\->socket. This effectively means that attempting I/O on
252 an initial accept socket will await an incoming connection then
253 perform I/O on it.
254 .PP
255 If any additional BIOs have been set using \fBBIO_set_accept_bios()\fR
256 then they are placed between the socket and the accept \s-1BIO,\s0
257 that is the chain will be accept\->otherbios\->socket.
258 .PP
259 If a server wishes to process multiple connections (as is normally
260 the case) then the accept \s-1BIO\s0 must be made available for further
261 incoming connections. This can be done by waiting for a connection and
262 then calling:
263 .PP
264 .Vb 1
265 \& connection = BIO_pop(accept);
266 .Ve
267 .PP
268 After this call \fBconnection\fR will contain a \s-1BIO\s0 for the recently
269 established connection and \fBaccept\fR will now be a single \s-1BIO\s0
270 again which can be used to await further incoming connections.
271 If no further connections will be accepted the \fBaccept\fR can
272 be freed using \fBBIO_free()\fR.
273 .PP
274 If only a single connection will be processed it is possible to
275 perform I/O using the accept \s-1BIO\s0 itself. This is often undesirable
276 however because the accept \s-1BIO\s0 will still accept additional incoming
277 connections. This can be resolved by using \fBBIO_pop()\fR (see above)
278 and freeing up the accept \s-1BIO\s0 after the initial connection.
279 .PP
280 If the underlying accept socket is non-blocking and \fBBIO_do_accept()\fR is
281 called to await an incoming connection it is possible for
282 \&\fBBIO_should_io_special()\fR with the reason \s-1BIO_RR_ACCEPT.\s0 If this happens
283 then it is an indication that an accept attempt would block: the application
284 should take appropriate action to wait until the underlying socket has
285 accepted a connection and retry the call.
286 .PP
287 \&\fBBIO_set_accept_name()\fR, \fBBIO_get_accept_name()\fR, \fBBIO_set_accept_port()\fR,
288 \&\fBBIO_get_accept_port()\fR, \fBBIO_set_nbio_accept()\fR, \fBBIO_set_accept_bios()\fR,
289 \&\fBBIO_get_peer_name()\fR, \fBBIO_get_peer_port()\fR,
290 \&\fBBIO_get_accept_ip_family()\fR, \fBBIO_set_accept_ip_family()\fR,
291 \&\fBBIO_set_bind_mode()\fR, \fBBIO_get_bind_mode()\fR and \fBBIO_do_accept()\fR are macros.
292 .SH "RETURN VALUES"
293 .IX Header "RETURN VALUES"
294 \&\fBBIO_do_accept()\fR,
295 \&\fBBIO_set_accept_name()\fR, \fBBIO_set_accept_port()\fR, \fBBIO_set_nbio_accept()\fR,
296 \&\fBBIO_set_accept_bios()\fR, \fBBIO_set_accept_ip_family()\fR, and \fBBIO_set_bind_mode()\fR
297 return 1 for success and 0 or \-1 for failure.
298 .PP
299 \&\fBBIO_get_accept_name()\fR returns the accept name or \s-1NULL\s0 on error.
300 \&\fBBIO_get_peer_name()\fR returns the peer name or \s-1NULL\s0 on error.
301 .PP
302 \&\fBBIO_get_accept_port()\fR returns the accept port as a string or \s-1NULL\s0 on error.
303 \&\fBBIO_get_peer_port()\fR returns the peer port as a string or \s-1NULL\s0 on error.
304 \&\fBBIO_get_accept_ip_family()\fR returns the \s-1IP\s0 family or \-1 on error.
305 .PP
306 \&\fBBIO_get_bind_mode()\fR returns the set of \fB\s-1BIO_BIND\s0\fR flags, or \-1 on failure.
307 .PP
308 \&\fBBIO_new_accept()\fR returns a \s-1BIO\s0 or \s-1NULL\s0 on error.
309 .SH "EXAMPLES"
310 .IX Header "EXAMPLES"
311 This example accepts two connections on port 4444, sends messages
312 down each and finally closes both down.
313 .PP
314 .Vb 1
315 \& BIO *abio, *cbio, *cbio2;
316 \&
317 \& /* First call to BIO_accept() sets up accept BIO */
318 \& abio = BIO_new_accept("4444");
319 \& if (BIO_do_accept(abio) <= 0) {
320 \&     fprintf(stderr, "Error setting up accept\en");
321 \&     ERR_print_errors_fp(stderr);
322 \&     exit(1);
323 \& }
324 \&
325 \& /* Wait for incoming connection */
326 \& if (BIO_do_accept(abio) <= 0) {
327 \&     fprintf(stderr, "Error accepting connection\en");
328 \&     ERR_print_errors_fp(stderr);
329 \&     exit(1);
330 \& }
331 \& fprintf(stderr, "Connection 1 established\en");
332 \&
333 \& /* Retrieve BIO for connection */
334 \& cbio = BIO_pop(abio);
335 \& BIO_puts(cbio, "Connection 1: Sending out Data on initial connection\en");
336 \& fprintf(stderr, "Sent out data on connection 1\en");
337 \&
338 \& /* Wait for another connection */
339 \& if (BIO_do_accept(abio) <= 0) {
340 \&     fprintf(stderr, "Error accepting connection\en");
341 \&     ERR_print_errors_fp(stderr);
342 \&     exit(1);
343 \& }
344 \& fprintf(stderr, "Connection 2 established\en");
345 \&
346 \& /* Close accept BIO to refuse further connections */
347 \& cbio2 = BIO_pop(abio);
348 \& BIO_free(abio);
349 \& BIO_puts(cbio2, "Connection 2: Sending out Data on second\en");
350 \& fprintf(stderr, "Sent out data on connection 2\en");
351 \&
352 \& BIO_puts(cbio, "Connection 1: Second connection established\en");
353 \&
354 \& /* Close the two established connections */
355 \& BIO_free(cbio);
356 \& BIO_free(cbio2);
357 .Ve
358 .SH "COPYRIGHT"
359 .IX Header "COPYRIGHT"
360 Copyright 2000\-2019 The OpenSSL Project Authors. All Rights Reserved.
361 .PP
362 Licensed under the OpenSSL license (the \*(L"License\*(R").  You may not use
363 this file except in compliance with the License.  You can obtain a copy
364 in the file \s-1LICENSE\s0 in the source distribution or at
365 <https://www.openssl.org/source/license.html>.