Merge from vendor branch OPENSSH:
[dragonfly.git] / secure / lib / libssl / man / SSL_get_error.3
1 .\" Automatically generated by Pod::Man version 1.15
2 .\" Wed Feb 19 16:47:46 2003
3 .\"
4 .\" Standard preamble:
5 .\" ======================================================================
6 .de Sh \" Subsection heading
7 .br
8 .if t .Sp
9 .ne 5
10 .PP
11 \fB\\$1\fR
12 .PP
13 ..
14 .de Sp \" Vertical space (when we can't use .PP)
15 .if t .sp .5v
16 .if n .sp
17 ..
18 .de Ip \" List item
19 .br
20 .ie \\n(.$>=3 .ne \\$3
21 .el .ne 3
22 .IP "\\$1" \\$2
23 ..
24 .de Vb \" Begin verbatim text
25 .ft CW
26 .nf
27 .ne \\$1
28 ..
29 .de Ve \" End verbatim text
30 .ft R
31
32 .fi
33 ..
34 .\" Set up some character translations and predefined strings.  \*(-- will
35 .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
36 .\" double quote, and \*(R" will give a right double quote.  | will give a
37 .\" real vertical bar.  \*(C+ will give a nicer C++.  Capital omega is used
38 .\" to do unbreakable dashes and therefore won't be available.  \*(C` and
39 .\" \*(C' expand to `' in nroff, nothing in troff, for use with C<>
40 .tr \(*W-|\(bv\*(Tr
41 .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
42 .ie n \{\
43 .    ds -- \(*W-
44 .    ds PI pi
45 .    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
46 .    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
47 .    ds L" ""
48 .    ds R" ""
49 .    ds C` ""
50 .    ds C' ""
51 'br\}
52 .el\{\
53 .    ds -- \|\(em\|
54 .    ds PI \(*p
55 .    ds L" ``
56 .    ds R" ''
57 'br\}
58 .\"
59 .\" If the F register is turned on, we'll generate index entries on stderr
60 .\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and
61 .\" index entries marked with X<> in POD.  Of course, you'll have to process
62 .\" the output yourself in some meaningful fashion.
63 .if \nF \{\
64 .    de IX
65 .    tm Index:\\$1\t\\n%\t"\\$2"
66 ..
67 .    nr % 0
68 .    rr F
69 .\}
70 .\"
71 .\" For nroff, turn off justification.  Always turn off hyphenation; it
72 .\" makes way too many mistakes in technical documents.
73 .hy 0
74 .if n .na
75 .\"
76 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
77 .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
78 .bd B 3
79 .    \" fudge factors for nroff and troff
80 .if n \{\
81 .    ds #H 0
82 .    ds #V .8m
83 .    ds #F .3m
84 .    ds #[ \f1
85 .    ds #] \fP
86 .\}
87 .if t \{\
88 .    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
89 .    ds #V .6m
90 .    ds #F 0
91 .    ds #[ \&
92 .    ds #] \&
93 .\}
94 .    \" simple accents for nroff and troff
95 .if n \{\
96 .    ds ' \&
97 .    ds ` \&
98 .    ds ^ \&
99 .    ds , \&
100 .    ds ~ ~
101 .    ds /
102 .\}
103 .if t \{\
104 .    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
105 .    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
106 .    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
107 .    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
108 .    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
109 .    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
110 .\}
111 .    \" troff and (daisy-wheel) nroff accents
112 .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
113 .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
114 .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
115 .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
116 .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
117 .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
118 .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
119 .ds ae a\h'-(\w'a'u*4/10)'e
120 .ds Ae A\h'-(\w'A'u*4/10)'E
121 .    \" corrections for vroff
122 .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
123 .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
124 .    \" for low resolution devices (crt and lpr)
125 .if \n(.H>23 .if \n(.V>19 \
126 \{\
127 .    ds : e
128 .    ds 8 ss
129 .    ds o a
130 .    ds d- d\h'-1'\(ga
131 .    ds D- D\h'-1'\(hy
132 .    ds th \o'bp'
133 .    ds Th \o'LP'
134 .    ds ae ae
135 .    ds Ae AE
136 .\}
137 .rm #[ #] #H #V #F C
138 .\" ======================================================================
139 .\"
140 .IX Title "SSL_get_error 3"
141 .TH SSL_get_error 3 "0.9.7a" "2003-02-19" "OpenSSL"
142 .UC
143 .SH "NAME"
144 SSL_get_error \- obtain result code for \s-1TLS/SSL\s0 I/O operation
145 .SH "SYNOPSIS"
146 .IX Header "SYNOPSIS"
147 .Vb 1
148 \& #include <openssl/ssl.h>
149 .Ve
150 .Vb 1
151 \& int SSL_get_error(SSL *ssl, int ret);
152 .Ve
153 .SH "DESCRIPTION"
154 .IX Header "DESCRIPTION"
155 \&\fISSL_get_error()\fR returns a result code (suitable for the C \*(L"switch\*(R"
156 statement) for a preceding call to \fISSL_connect()\fR, \fISSL_accept()\fR, \fISSL_do_handshake()\fR,
157 \&\fISSL_read()\fR, \fISSL_peek()\fR, or \fISSL_write()\fR on \fBssl\fR.  The value returned by
158 that \s-1TLS/SSL\s0 I/O function must be passed to \fISSL_get_error()\fR in parameter
159 \&\fBret\fR.
160 .PP
161 In addition to \fBssl\fR and \fBret\fR, \fISSL_get_error()\fR inspects the
162 current thread's OpenSSL error queue.  Thus, \fISSL_get_error()\fR must be
163 used in the same thread that performed the \s-1TLS/SSL\s0 I/O operation, and no
164 other OpenSSL function calls should appear in between.  The current
165 thread's error queue must be empty before the \s-1TLS/SSL\s0 I/O operation is
166 attempted, or \fISSL_get_error()\fR will not work reliably.
167 .SH "RETURN VALUES"
168 .IX Header "RETURN VALUES"
169 The following return values can currently occur:
170 .Ip "\s-1SSL_ERROR_NONE\s0" 4
171 .IX Item "SSL_ERROR_NONE"
172 The \s-1TLS/SSL\s0 I/O operation completed.  This result code is returned
173 if and only if \fBret > 0\fR.
174 .Ip "\s-1SSL_ERROR_ZERO_RETURN\s0" 4
175 .IX Item "SSL_ERROR_ZERO_RETURN"
176 The \s-1TLS/SSL\s0 connection has been closed.  If the protocol version is \s-1SSL\s0 3.0
177 or \s-1TLS\s0 1.0, this result code is returned only if a closure
178 alert has occurred in the protocol, i.e. if the connection has been
179 closed cleanly. Note that in this case \fB\s-1SSL_ERROR_ZERO_RETURN\s0\fR
180 does not necessarily indicate that the underlying transport
181 has been closed.
182 .Ip "\s-1SSL_ERROR_WANT_READ\s0, \s-1SSL_ERROR_WANT_WRITE\s0" 4
183 .IX Item "SSL_ERROR_WANT_READ, SSL_ERROR_WANT_WRITE"
184 The operation did not complete; the same \s-1TLS/SSL\s0 I/O function should be
185 called again later.  If, by then, the underlying \fB\s-1BIO\s0\fR has data
186 available for reading (if the result code is \fB\s-1SSL_ERROR_WANT_READ\s0\fR)
187 or allows writing data (\fB\s-1SSL_ERROR_WANT_WRITE\s0\fR), then some \s-1TLS/SSL\s0
188 protocol progress will take place, i.e. at least part of an \s-1TLS/SSL\s0
189 record will be read or written.  Note that the retry may again lead to
190 a \fB\s-1SSL_ERROR_WANT_READ\s0\fR or \fB\s-1SSL_ERROR_WANT_WRITE\s0\fR condition.
191 There is no fixed upper limit for the number of iterations that
192 may be necessary until progress becomes visible at application
193 protocol level.
194 .Sp
195 For socket \fB\s-1BIO\s0\fRs (e.g. when \fISSL_set_fd()\fR was used), \fIselect()\fR or
196 \&\fIpoll()\fR on the underlying socket can be used to find out when the
197 \&\s-1TLS/SSL\s0 I/O function should be retried.
198 .Sp
199 Caveat: Any \s-1TLS/SSL\s0 I/O function can lead to either of
200 \&\fB\s-1SSL_ERROR_WANT_READ\s0\fR and \fB\s-1SSL_ERROR_WANT_WRITE\s0\fR.  In particular,
201 \&\fISSL_read()\fR or \fISSL_peek()\fR may want to write data and \fISSL_write()\fR may want
202 to read data.  This is mainly because \s-1TLS/SSL\s0 handshakes may occur at any
203 time during the protocol (initiated by either the client or the server);
204 \&\fISSL_read()\fR, \fISSL_peek()\fR, and \fISSL_write()\fR will handle any pending handshakes.
205 .Ip "\s-1SSL_ERROR_WANT_CONNECT\s0, \s-1SSL_ERROR_WANT_ACCEPT\s0" 4
206 .IX Item "SSL_ERROR_WANT_CONNECT, SSL_ERROR_WANT_ACCEPT"
207 The operation did not complete; the same \s-1TLS/SSL\s0 I/O function should be
208 called again later. The underlying \s-1BIO\s0 was not connected yet to the peer
209 and the call would block in \fIconnect()\fR/\fIaccept()\fR. The \s-1SSL\s0 function should be
210 called again when the connection is established. These messages can only
211 appear with a \fIBIO_s_connect()\fR or \fIBIO_s_accept()\fR \s-1BIO\s0, respectively.
212 In order to find out, when the connection has been successfully established,
213 on many platforms \fIselect()\fR or \fIpoll()\fR for writing on the socket file descriptor
214 can be used.
215 .Ip "\s-1SSL_ERROR_WANT_X509_LOOKUP\s0" 4
216 .IX Item "SSL_ERROR_WANT_X509_LOOKUP"
217 The operation did not complete because an application callback set by
218 \&\fISSL_CTX_set_client_cert_cb()\fR has asked to be called again.
219 The \s-1TLS/SSL\s0 I/O function should be called again later.
220 Details depend on the application.
221 .Ip "\s-1SSL_ERROR_SYSCALL\s0" 4
222 .IX Item "SSL_ERROR_SYSCALL"
223 Some I/O error occurred.  The OpenSSL error queue may contain more
224 information on the error.  If the error queue is empty
225 (i.e. \fIERR_get_error()\fR returns 0), \fBret\fR can be used to find out more
226 about the error: If \fBret == 0\fR, an \s-1EOF\s0 was observed that violates
227 the protocol.  If \fBret == \-1\fR, the underlying \fB\s-1BIO\s0\fR reported an
228 I/O error (for socket I/O on Unix systems, consult \fBerrno\fR for details).
229 .Ip "\s-1SSL_ERROR_SSL\s0" 4
230 .IX Item "SSL_ERROR_SSL"
231 A failure in the \s-1SSL\s0 library occurred, usually a protocol error.  The
232 OpenSSL error queue contains more information on the error.
233 .SH "SEE ALSO"
234 .IX Header "SEE ALSO"
235 ssl(3), err(3)
236 .SH "HISTORY"
237 .IX Header "HISTORY"
238 \&\fISSL_get_error()\fR was added in SSLeay 0.8.