1libcurl-errors(3) libcurl errors libcurl-errors(3)
2
3
4
6 libcurl-errors - error codes in libcurl
7
9 This man page includes most, if not all, available error codes in
10 libcurl. Why they occur and possibly what you can do to fix the prob‐
11 lem are also included.
12
14 Almost all "easy" interface functions return a CURLcode error code. No
15 matter what, using the curl_easy_setopt(3) option CURLOPT_ERROR‐
16 BUFFER(3) is a good idea as it will give you a human readable error
17 string that may offer more details about the cause of the error than
18 just the error code. curl_easy_strerror(3) can be called to get an
19 error string from a given CURLcode number.
20
21 CURLcode is one of the following:
22
23 CURLE_OK (0)
24 All fine. Proceed as usual.
25
26 CURLE_UNSUPPORTED_PROTOCOL (1)
27 The URL you passed to libcurl used a protocol that this libcurl
28 does not support. The support might be a compile-time option
29 that you didn't use, it can be a misspelled protocol string or
30 just a protocol libcurl has no code for.
31
32 CURLE_FAILED_INIT (2)
33 Very early initialization code failed. This is likely to be an
34 internal error or problem, or a resource problem where something
35 fundamental couldn't get done at init time.
36
37 CURLE_URL_MALFORMAT (3)
38 The URL was not properly formatted.
39
40 CURLE_NOT_BUILT_IN (4)
41 A requested feature, protocol or option was not found built-in
42 in this libcurl due to a build-time decision. This means that a
43 feature or option was not enabled or explicitly disabled when
44 libcurl was built and in order to get it to function you have to
45 get a rebuilt libcurl.
46
47 CURLE_COULDNT_RESOLVE_PROXY (5)
48 Couldn't resolve proxy. The given proxy host could not be
49 resolved.
50
51 CURLE_COULDNT_RESOLVE_HOST (6)
52 Couldn't resolve host. The given remote host was not resolved.
53
54 CURLE_COULDNT_CONNECT (7)
55 Failed to connect() to host or proxy.
56
57 CURLE_FTP_WEIRD_SERVER_REPLY (8)
58 The server sent data libcurl couldn't parse. This error code is
59 used for more than just FTP and is aliased as
60 CURLE_WEIRD_SERVER_REPLY since 7.51.0.
61
62 CURLE_REMOTE_ACCESS_DENIED (9)
63 We were denied access to the resource given in the URL. For
64 FTP, this occurs while trying to change to the remote directory.
65
66 CURLE_FTP_ACCEPT_FAILED (10)
67 While waiting for the server to connect back when an active FTP
68 session is used, an error code was sent over the control connec‐
69 tion or similar.
70
71 CURLE_FTP_WEIRD_PASS_REPLY (11)
72 After having sent the FTP password to the server, libcurl
73 expects a proper reply. This error code indicates that an unex‐
74 pected code was returned.
75
76 CURLE_FTP_ACCEPT_TIMEOUT (12)
77 During an active FTP session while waiting for the server to
78 connect, the CURLOPT_ACCEPTTIMEOUT_MS(3) (or the internal
79 default) timeout expired.
80
81 CURLE_FTP_WEIRD_PASV_REPLY (13)
82 libcurl failed to get a sensible result back from the server as
83 a response to either a PASV or a EPSV command. The server is
84 flawed.
85
86 CURLE_FTP_WEIRD_227_FORMAT (14)
87 FTP servers return a 227-line as a response to a PASV command.
88 If libcurl fails to parse that line, this return code is passed
89 back.
90
91 CURLE_FTP_CANT_GET_HOST (15)
92 An internal failure to lookup the host used for the new connec‐
93 tion.
94
95 CURLE_HTTP2 (16)
96 A problem was detected in the HTTP2 framing layer. This is some‐
97 what generic and can be one out of several problems, see the
98 error buffer for details.
99
100 CURLE_FTP_COULDNT_SET_TYPE (17)
101 Received an error when trying to set the transfer mode to binary
102 or ASCII.
103
104 CURLE_PARTIAL_FILE (18)
105 A file transfer was shorter or larger than expected. This hap‐
106 pens when the server first reports an expected transfer size,
107 and then delivers data that doesn't match the previously given
108 size.
109
110 CURLE_FTP_COULDNT_RETR_FILE (19)
111 This was either a weird reply to a 'RETR' command or a zero byte
112 transfer complete.
113
114 CURLE_QUOTE_ERROR (21)
115 When sending custom "QUOTE" commands to the remote server, one
116 of the commands returned an error code that was 400 or higher
117 (for FTP) or otherwise indicated unsuccessful completion of the
118 command.
119
120 CURLE_HTTP_RETURNED_ERROR (22)
121 This is returned if CURLOPT_FAILONERROR(3) is set TRUE and the
122 HTTP server returns an error code that is >= 400.
123
124 CURLE_WRITE_ERROR (23)
125 An error occurred when writing received data to a local file, or
126 an error was returned to libcurl from a write callback.
127
128 CURLE_UPLOAD_FAILED (25)
129 Failed starting the upload. For FTP, the server typically denied
130 the STOR command. The error buffer usually contains the server's
131 explanation for this.
132
133 CURLE_READ_ERROR (26)
134 There was a problem reading a local file or an error returned by
135 the read callback.
136
137 CURLE_OUT_OF_MEMORY (27)
138 A memory allocation request failed. This is serious badness and
139 things are severely screwed up if this ever occurs.
140
141 CURLE_OPERATION_TIMEDOUT (28)
142 Operation timeout. The specified time-out period was reached
143 according to the conditions.
144
145 CURLE_FTP_PORT_FAILED (30)
146 The FTP PORT command returned error. This mostly happens when
147 you haven't specified a good enough address for libcurl to use.
148 See CURLOPT_FTPPORT(3).
149
150 CURLE_FTP_COULDNT_USE_REST (31)
151 The FTP REST command returned error. This should never happen if
152 the server is sane.
153
154 CURLE_RANGE_ERROR (33)
155 The server does not support or accept range requests.
156
157 CURLE_HTTP_POST_ERROR (34)
158 This is an odd error that mainly occurs due to internal confu‐
159 sion.
160
161 CURLE_SSL_CONNECT_ERROR (35)
162 A problem occurred somewhere in the SSL/TLS handshake. You
163 really want the error buffer and read the message there as it
164 pinpoints the problem slightly more. Could be certificates (file
165 formats, paths, permissions), passwords, and others.
166
167 CURLE_BAD_DOWNLOAD_RESUME (36)
168 The download could not be resumed because the specified offset
169 was out of the file boundary.
170
171 CURLE_FILE_COULDNT_READ_FILE (37)
172 A file given with FILE:// couldn't be opened. Most likely
173 because the file path doesn't identify an existing file. Did you
174 check file permissions?
175
176 CURLE_LDAP_CANNOT_BIND (38)
177 LDAP cannot bind. LDAP bind operation failed.
178
179 CURLE_LDAP_SEARCH_FAILED (39)
180 LDAP search failed.
181
182 CURLE_FUNCTION_NOT_FOUND (41)
183 Function not found. A required zlib function was not found.
184
185 CURLE_ABORTED_BY_CALLBACK (42)
186 Aborted by callback. A callback returned "abort" to libcurl.
187
188 CURLE_BAD_FUNCTION_ARGUMENT (43)
189 Internal error. A function was called with a bad parameter.
190
191 CURLE_INTERFACE_FAILED (45)
192 Interface error. A specified outgoing interface could not be
193 used. Set which interface to use for outgoing connections'
194 source IP address with CURLOPT_INTERFACE(3).
195
196 CURLE_TOO_MANY_REDIRECTS (47)
197 Too many redirects. When following redirects, libcurl hit the
198 maximum amount. Set your limit with CURLOPT_MAXREDIRS(3).
199
200 CURLE_UNKNOWN_OPTION (48)
201 An option passed to libcurl is not recognized/known. Refer to
202 the appropriate documentation. This is most likely a problem in
203 the program that uses libcurl. The error buffer might contain
204 more specific information about which exact option it concerns.
205
206 CURLE_TELNET_OPTION_SYNTAX (49)
207 A telnet option string was Illegally formatted.
208
209 CURLE_GOT_NOTHING (52)
210 Nothing was returned from the server, and under the circum‐
211 stances, getting nothing is considered an error.
212
213 CURLE_SSL_ENGINE_NOTFOUND (53)
214 The specified crypto engine wasn't found.
215
216 CURLE_SSL_ENGINE_SETFAILED (54)
217 Failed setting the selected SSL crypto engine as default!
218
219 CURLE_SEND_ERROR (55)
220 Failed sending network data.
221
222 CURLE_RECV_ERROR (56)
223 Failure with receiving network data.
224
225 CURLE_SSL_CERTPROBLEM (58)
226 problem with the local client certificate.
227
228 CURLE_SSL_CIPHER (59)
229 Couldn't use specified cipher.
230
231 CURLE_PEER_FAILED_VERIFICATION (60)
232 The remote server's SSL certificate or SSH md5 fingerprint was
233 deemed not OK. This error code has been unified with
234 CURLE_SSL_CACERT since 7.62.0. Its previous value was 51.
235
236 CURLE_BAD_CONTENT_ENCODING (61)
237 Unrecognized transfer encoding.
238
239 CURLE_LDAP_INVALID_URL (62)
240 Invalid LDAP URL.
241
242 CURLE_FILESIZE_EXCEEDED (63)
243 Maximum file size exceeded.
244
245 CURLE_USE_SSL_FAILED (64)
246 Requested FTP SSL level failed.
247
248 CURLE_SEND_FAIL_REWIND (65)
249 When doing a send operation curl had to rewind the data to
250 retransmit, but the rewinding operation failed.
251
252 CURLE_SSL_ENGINE_INITFAILED (66)
253 Initiating the SSL Engine failed.
254
255 CURLE_LOGIN_DENIED (67)
256 The remote server denied curl to login (Added in 7.13.1)
257
258 CURLE_TFTP_NOTFOUND (68)
259 File not found on TFTP server.
260
261 CURLE_TFTP_PERM (69)
262 Permission problem on TFTP server.
263
264 CURLE_REMOTE_DISK_FULL (70)
265 Out of disk space on the server.
266
267 CURLE_TFTP_ILLEGAL (71)
268 Illegal TFTP operation.
269
270 CURLE_TFTP_UNKNOWNID (72)
271 Unknown TFTP transfer ID.
272
273 CURLE_REMOTE_FILE_EXISTS (73)
274 File already exists and will not be overwritten.
275
276 CURLE_TFTP_NOSUCHUSER (74)
277 This error should never be returned by a properly functioning
278 TFTP server.
279
280 CURLE_CONV_FAILED (75)
281 Character conversion failed.
282
283 CURLE_CONV_REQD (76)
284 Caller must register conversion callbacks.
285
286 CURLE_SSL_CACERT_BADFILE (77)
287 Problem with reading the SSL CA cert (path? access rights?)
288
289 CURLE_REMOTE_FILE_NOT_FOUND (78)
290 The resource referenced in the URL does not exist.
291
292 CURLE_SSH (79)
293 An unspecified error occurred during the SSH session.
294
295 CURLE_SSL_SHUTDOWN_FAILED (80)
296 Failed to shut down the SSL connection.
297
298 CURLE_AGAIN (81)
299 Socket is not ready for send/recv wait till it's ready and try
300 again. This return code is only returned from curl_easy_recv(3)
301 and curl_easy_send(3) (Added in 7.18.2)
302
303 CURLE_SSL_CRL_BADFILE (82)
304 Failed to load CRL file (Added in 7.19.0)
305
306 CURLE_SSL_ISSUER_ERROR (83)
307 Issuer check failed (Added in 7.19.0)
308
309 CURLE_FTP_PRET_FAILED (84)
310 The FTP server does not understand the PRET command at all or
311 does not support the given argument. Be careful when using CUR‐
312 LOPT_CUSTOMREQUEST(3), a custom LIST command will be sent with
313 PRET CMD before PASV as well. (Added in 7.20.0)
314
315 CURLE_RTSP_CSEQ_ERROR (85)
316 Mismatch of RTSP CSeq numbers.
317
318 CURLE_RTSP_SESSION_ERROR (86)
319 Mismatch of RTSP Session Identifiers.
320
321 CURLE_FTP_BAD_FILE_LIST (87)
322 Unable to parse FTP file list (during FTP wildcard downloading).
323
324 CURLE_CHUNK_FAILED (88)
325 Chunk callback reported error.
326
327 CURLE_NO_CONNECTION_AVAILABLE (89)
328 (For internal use only, will never be returned by libcurl) No
329 connection available, the session will be queued. (added in
330 7.30.0)
331
332 CURLE_SSL_PINNEDPUBKEYNOTMATCH (90)
333 Failed to match the pinned key specified with CURLOPT_PINNEDPUB‐
334 LICKEY(3).
335
336 CURLE_SSL_INVALIDCERTSTATUS (91)
337 Status returned failure when asked with CURLOPT_SSL_VERIFYSTA‐
338 TUS(3).
339
340 CURLE_HTTP2_STREAM (92)
341 Stream error in the HTTP/2 framing layer.
342
343 CURLE_RECURSIVE_API_CALL (93)
344 An API function was called from inside a callback.
345
346 CURLE_OBSOLETE*
347 These error codes will never be returned. They were used in an
348 old libcurl version and are currently unused.
349
351 This is the generic return code used by functions in the libcurl multi
352 interface. Also consider curl_multi_strerror(3).
353
354 CURLM_CALL_MULTI_PERFORM (-1)
355 This is not really an error. It means you should call
356 curl_multi_perform(3) again without doing select() or similar in
357 between. Before version 7.20.0 this could be returned by
358 curl_multi_perform(3), but in later versions this return code is
359 never used.
360
361 CURLM_OK (0)
362 Things are fine.
363
364 CURLM_BAD_HANDLE (1)
365 The passed-in handle is not a valid CURLM handle.
366
367 CURLM_BAD_EASY_HANDLE (2)
368 An easy handle was not good/valid. It could mean that it isn't
369 an easy handle at all, or possibly that the handle already is in
370 used by this or another multi handle.
371
372 CURLM_OUT_OF_MEMORY (3)
373 You are doomed.
374
375 CURLM_INTERNAL_ERROR (4)
376 This can only be returned if libcurl bugs. Please report it to
377 us!
378
379 CURLM_BAD_SOCKET (5)
380 The passed-in socket is not a valid one that libcurl already
381 knows about. (Added in 7.15.4)
382
383 CURLM_UNKNOWN_OPTION (6)
384 curl_multi_setopt() with unsupported option (Added in 7.15.4)
385
386 CURLM_ADDED_ALREADY (7)
387 An easy handle already added to a multi handle was attempted to
388 get added a second time. (Added in 7.32.1)
389
390 CURLM_RECURSIVE_API_CALL (8)
391 An API function was called from inside a callback.
392
394 The "share" interface will return a CURLSHcode to indicate when an
395 error has occurred. Also consider curl_share_strerror(3).
396
397 CURLSHE_OK (0)
398 All fine. Proceed as usual.
399
400 CURLSHE_BAD_OPTION (1)
401 An invalid option was passed to the function.
402
403 CURLSHE_IN_USE (2)
404 The share object is currently in use.
405
406 CURLSHE_INVALID (3)
407 An invalid share object was passed to the function.
408
409 CURLSHE_NOMEM (4)
410 Not enough memory was available. (Added in 7.12.0)
411
412 CURLSHE_NOT_BUILT_IN (5)
413 The requested sharing could not be done because the library you
414 use don't have that particular feature enabled. (Added in
415 7.23.0)
416
418 CURLUE_BAD_HANDLE (1)
419 An argument that should be a CURLU pointer was passed in as a
420 NULL.
421
422 CURLUE_BAD_PARTPOINTER (2)
423 A NULL pointer was passed to the 'part' argument of
424 curl_url_get(3).
425
426 CURLUE_MALFORMED_INPUT (3)
427 A malformed input was passed to a URL API function.
428
429 CURLUE_BAD_PORT_NUMBER (4)
430 The port number was not a decimal number between 0 and 65535.
431
432 CURLUE_UNSUPPORTED_SCHEME (5)
433 This libcurl build doesn't support the given URL scheme.
434
435 CURLUE_URLDECODE (6)
436 URL decode error, most likely because of rubbish in the input.
437
438 CURLUE_OUT_OF_MEMORY (7)
439 A memory function failed.
440
441 CURLUE_USER_NOT_ALLOWED (8)
442 Credentials was passed in the URL when prohibited.
443
444 CURLUE_UNKNOWN_PART (9)
445 An unknown part ID was passed to a URL API function.
446
447 CURLUE_NO_SCHEME (10)
448 There is no scheme part in the URL.
449
450 CURLUE_NO_USER (11)
451 There is no user part in the URL.
452
453 CURLUE_NO_PASSWORD (12)
454 There is no password part in the URL.
455
456 CURLUE_NO_OPTIONS (13)
457 There is no options part in the URL.
458
459 CURLUE_NO_HOST (14)
460 There is no host part in the URL.
461
462 CURLUE_NO_PORT (15)
463 There is no port part in the URL.
464
465 CURLUE_NO_QUERY (16)
466 There is no query part in the URL.
467
468 CURLUE_NO_FRAGMENT (17)
469 There is no fragment part in the URL.
470
472 curl_easy_strerror(3), curl_multi_strerror(3), curl_share_strerror(3),
473 CURLOPT_ERRORBUFFER(3), CURLOPT_VERBOSE(3), CURLOPT_DEBUGFUNCTION(3)
474
475
476
477libcurl 7.64.0 November 19, 2018 libcurl-errors(3)