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