Update build for OpenSSL-0.9.8j upgrade.
[dragonfly.git] / secure / lib / libcrypto / man / BIO_should_retry.3
CommitLineData
e257b235 1.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05)
8b0cefbb
JR
2.\"
3.\" Standard preamble:
4.\" ========================================================================
5.de Sh \" Subsection heading
984263bc
MD
6.br
7.if t .Sp
8.ne 5
9.PP
10\fB\\$1\fR
11.PP
12..
8b0cefbb 13.de Sp \" Vertical space (when we can't use .PP)
984263bc
MD
14.if t .sp .5v
15.if n .sp
16..
8b0cefbb 17.de Vb \" Begin verbatim text
984263bc
MD
18.ft CW
19.nf
20.ne \\$1
21..
8b0cefbb 22.de Ve \" End verbatim text
984263bc 23.ft R
984263bc
MD
24.fi
25..
8b0cefbb
JR
26.\" Set up some character translations and predefined strings. \*(-- will
27.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
e257b235
PA
28.\" double quote, and \*(R" will give a right double quote. \*(C+ will
29.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
30.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
31.\" nothing in troff, for use with C<>.
32.tr \(*W-
8b0cefbb 33.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
984263bc 34.ie n \{\
8b0cefbb
JR
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' ""
984263bc
MD
43'br\}
44.el\{\
8b0cefbb
JR
45. ds -- \|\(em\|
46. ds PI \(*p
47. ds L" ``
48. ds R" ''
984263bc 49'br\}
8b0cefbb 50.\"
e257b235
PA
51.\" Escape single quotes in literal strings from groff's Unicode transform.
52.ie \n(.g .ds Aq \(aq
53.el .ds Aq '
54.\"
8b0cefbb
JR
55.\" If the F register is turned on, we'll generate index entries on stderr for
56.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
57.\" entries marked with X<> in POD. Of course, you'll have to process the
58.\" output yourself in some meaningful fashion.
e257b235 59.ie \nF \{\
8b0cefbb
JR
60. de IX
61. tm Index:\\$1\t\\n%\t"\\$2"
984263bc 62..
8b0cefbb
JR
63. nr % 0
64. rr F
984263bc 65.\}
e257b235
PA
66.el \{\
67. de IX
68..
69.\}
aac4ff6f 70.\"
8b0cefbb
JR
71.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
72.\" Fear. Run. Save yourself. No user-serviceable parts.
73. \" fudge factors for nroff and troff
984263bc 74.if n \{\
8b0cefbb
JR
75. ds #H 0
76. ds #V .8m
77. ds #F .3m
78. ds #[ \f1
79. ds #] \fP
984263bc
MD
80.\}
81.if t \{\
8b0cefbb
JR
82. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
83. ds #V .6m
84. ds #F 0
85. ds #[ \&
86. ds #] \&
984263bc 87.\}
8b0cefbb 88. \" simple accents for nroff and troff
984263bc 89.if n \{\
8b0cefbb
JR
90. ds ' \&
91. ds ` \&
92. ds ^ \&
93. ds , \&
94. ds ~ ~
95. ds /
984263bc
MD
96.\}
97.if t \{\
8b0cefbb
JR
98. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
99. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
100. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
101. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
102. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
103. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
984263bc 104.\}
8b0cefbb 105. \" troff and (daisy-wheel) nroff accents
984263bc
MD
106.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
107.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
108.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
109.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
110.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
111.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
112.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
113.ds ae a\h'-(\w'a'u*4/10)'e
114.ds Ae A\h'-(\w'A'u*4/10)'E
8b0cefbb 115. \" corrections for vroff
984263bc
MD
116.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
117.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
8b0cefbb 118. \" for low resolution devices (crt and lpr)
984263bc
MD
119.if \n(.H>23 .if \n(.V>19 \
120\{\
8b0cefbb
JR
121. ds : e
122. ds 8 ss
123. ds o a
124. ds d- d\h'-1'\(ga
125. ds D- D\h'-1'\(hy
126. ds th \o'bp'
127. ds Th \o'LP'
128. ds ae ae
129. ds Ae AE
984263bc
MD
130.\}
131.rm #[ #] #H #V #F C
8b0cefbb
JR
132.\" ========================================================================
133.\"
134.IX Title "BIO_should_retry 3"
e257b235
PA
135.TH BIO_should_retry 3 "2009-01-11" "0.9.8j" "OpenSSL"
136.\" For nroff, turn off justification. Always turn off hyphenation; it makes
137.\" way too many mistakes in technical documents.
138.if n .ad l
139.nh
984263bc
MD
140.SH "NAME"
141BIO_should_retry, BIO_should_read, BIO_should_write,
142BIO_should_io_special, BIO_retry_type, BIO_should_retry,
74dab6c2 143BIO_get_retry_BIO, BIO_get_retry_reason \- BIO retry functions
984263bc 144.SH "SYNOPSIS"
8b0cefbb 145.IX Header "SYNOPSIS"
984263bc
MD
146.Vb 1
147\& #include <openssl/bio.h>
e257b235
PA
148\&
149\& #define BIO_should_read(a) ((a)\->flags & BIO_FLAGS_READ)
150\& #define BIO_should_write(a) ((a)\->flags & BIO_FLAGS_WRITE)
151\& #define BIO_should_io_special(a) ((a)\->flags & BIO_FLAGS_IO_SPECIAL)
152\& #define BIO_retry_type(a) ((a)\->flags & BIO_FLAGS_RWS)
153\& #define BIO_should_retry(a) ((a)\->flags & BIO_FLAGS_SHOULD_RETRY)
154\&
984263bc
MD
155\& #define BIO_FLAGS_READ 0x01
156\& #define BIO_FLAGS_WRITE 0x02
157\& #define BIO_FLAGS_IO_SPECIAL 0x04
158\& #define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL)
159\& #define BIO_FLAGS_SHOULD_RETRY 0x08
e257b235 160\&
984263bc
MD
161\& BIO * BIO_get_retry_BIO(BIO *bio, int *reason);
162\& int BIO_get_retry_reason(BIO *bio);
163.Ve
164.SH "DESCRIPTION"
8b0cefbb
JR
165.IX Header "DESCRIPTION"
166These functions determine why a \s-1BIO\s0 is not able to read or write data.
984263bc
MD
167They will typically be called after a failed \fIBIO_read()\fR or \fIBIO_write()\fR
168call.
169.PP
8b0cefbb 170\&\fIBIO_should_retry()\fR is true if the call that produced this condition
984263bc
MD
171should then be retried at a later time.
172.PP
173If \fIBIO_should_retry()\fR is false then the cause is an error condition.
174.PP
8b0cefbb 175\&\fIBIO_should_read()\fR is true if the cause of the condition is that a \s-1BIO\s0
984263bc
MD
176needs to read data.
177.PP
8b0cefbb 178\&\fIBIO_should_write()\fR is true if the cause of the condition is that a \s-1BIO\s0
984263bc
MD
179needs to read data.
180.PP
8b0cefbb 181\&\fIBIO_should_io_special()\fR is true if some \*(L"special\*(R" condition, that is a
984263bc
MD
182reason other than reading or writing is the cause of the condition.
183.PP
8b0cefbb
JR
184\&\fIBIO_get_retry_reason()\fR returns a mask of the cause of a retry condition
185consisting of the values \fB\s-1BIO_FLAGS_READ\s0\fR, \fB\s-1BIO_FLAGS_WRITE\s0\fR,
186\&\fB\s-1BIO_FLAGS_IO_SPECIAL\s0\fR though current \s-1BIO\s0 types will only set one of
984263bc
MD
187these.
188.PP
8b0cefbb
JR
189\&\fIBIO_get_retry_BIO()\fR determines the precise reason for the special
190condition, it returns the \s-1BIO\s0 that caused this condition and if
191\&\fBreason\fR is not \s-1NULL\s0 it contains the reason code. The meaning of
984263bc 192the reason code and the action that should be taken depends on
8b0cefbb 193the type of \s-1BIO\s0 that resulted in this condition.
984263bc 194.PP
8b0cefbb
JR
195\&\fIBIO_get_retry_reason()\fR returns the reason for a special condition if
196passed the relevant \s-1BIO\s0, for example as returned by \fIBIO_get_retry_BIO()\fR.
984263bc 197.SH "NOTES"
8b0cefbb 198.IX Header "NOTES"
984263bc 199If \fIBIO_should_retry()\fR returns false then the precise \*(L"error condition\*(R"
8b0cefbb
JR
200depends on the \s-1BIO\s0 type that caused it and the return code of the \s-1BIO\s0
201operation. For example if a call to \fIBIO_read()\fR on a socket \s-1BIO\s0 returns
984263bc 2020 and \fIBIO_should_retry()\fR is false then the cause will be that the
8b0cefbb
JR
203connection closed. A similar condition on a file \s-1BIO\s0 will mean that it
204has reached \s-1EOF\s0. Some \s-1BIO\s0 types may place additional information on
205the error queue. For more details see the individual \s-1BIO\s0 type manual
984263bc
MD
206pages.
207.PP
208If the underlying I/O structure is in a blocking mode almost all current
8b0cefbb
JR
209\&\s-1BIO\s0 types will not request a retry, because the underlying I/O
210calls will not. If the application knows that the \s-1BIO\s0 type will never
984263bc 211signal a retry then it need not call \fIBIO_should_retry()\fR after a failed
8b0cefbb 212\&\s-1BIO\s0 I/O call. This is typically done with file BIOs.
984263bc 213.PP
8b0cefbb 214\&\s-1SSL\s0 BIOs are the only current exception to this rule: they can request a
984263bc
MD
215retry even if the underlying I/O structure is blocking, if a handshake
216occurs during a call to \fIBIO_read()\fR. An application can retry the failed
8b0cefbb
JR
217call immediately or avoid this situation by setting \s-1SSL_MODE_AUTO_RETRY\s0
218on the underlying \s-1SSL\s0 structure.
984263bc
MD
219.PP
220While an application may retry a failed non blocking call immediately
221this is likely to be very inefficient because the call will fail
222repeatedly until data can be processed or is available. An application
223will normally wait until the necessary condition is satisfied. How
224this is done depends on the underlying I/O structure.
225.PP
226For example if the cause is ultimately a socket and \fIBIO_should_read()\fR
227is true then a call to \fIselect()\fR may be made to wait until data is
8b0cefbb 228available and then retry the \s-1BIO\s0 operation. By combining the retry
984263bc
MD
229conditions of several non blocking BIOs in a single \fIselect()\fR call
230it is possible to service several BIOs in a single thread, though
8b0cefbb 231the performance may be poor if \s-1SSL\s0 BIOs are present because long delays
e257b235 232can occur during the initial handshake process.
984263bc 233.PP
8b0cefbb 234It is possible for a \s-1BIO\s0 to block indefinitely if the underlying I/O
984263bc
MD
235structure cannot process or return any data. This depends on the behaviour of
236the platforms I/O functions. This is often not desirable: one solution
237is to use non blocking I/O and use a timeout on the \fIselect()\fR (or
238equivalent) call.
239.SH "BUGS"
8b0cefbb
JR
240.IX Header "BUGS"
241The OpenSSL \s-1ASN1\s0 functions cannot gracefully deal with non blocking I/O:
984263bc 242that is they cannot retry after a partial read or write. This is usually
8b0cefbb 243worked around by only passing the relevant data to \s-1ASN1\s0 functions when
984263bc
MD
244the entire structure can be read or written.
245.SH "SEE ALSO"
246.IX Header "SEE ALSO"
8b0cefbb 247\&\s-1TBA\s0