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 er‐
19 ror 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 re‐
49 solved.
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_WEIRD_SERVER_REPLY (8)
58 The server sent data libcurl couldn't parse. This error code was
59 known as as CURLE_FTP_WEIRD_SERVER_REPLY before 7.51.0.
60
61 CURLE_REMOTE_ACCESS_DENIED (9)
62 We were denied access to the resource given in the URL. For
63 FTP, this occurs while trying to change to the remote directory.
64
65 CURLE_FTP_ACCEPT_FAILED (10)
66 While waiting for the server to connect back when an active FTP
67 session is used, an error code was sent over the control connec‐
68 tion or similar.
69
70 CURLE_FTP_WEIRD_PASS_REPLY (11)
71 After having sent the FTP password to the server, libcurl ex‐
72 pects a proper reply. This error code indicates that an unex‐
73 pected code was returned.
74
75 CURLE_FTP_ACCEPT_TIMEOUT (12)
76 During an active FTP session while waiting for the server to
77 connect, the CURLOPT_ACCEPTTIMEOUT_MS(3) (or the internal de‐
78 fault) timeout expired.
79
80 CURLE_FTP_WEIRD_PASV_REPLY (13)
81 libcurl failed to get a sensible result back from the server as
82 a response to either a PASV or a EPSV command. The server is
83 flawed.
84
85 CURLE_FTP_WEIRD_227_FORMAT (14)
86 FTP servers return a 227-line as a response to a PASV command.
87 If libcurl fails to parse that line, this return code is passed
88 back.
89
90 CURLE_FTP_CANT_GET_HOST (15)
91 An internal failure to lookup the host used for the new connec‐
92 tion.
93
94 CURLE_HTTP2 (16)
95 A problem was detected in the HTTP2 framing layer. This is some‐
96 what generic and can be one out of several problems, see the er‐
97 ror buffer for details.
98
99 CURLE_FTP_COULDNT_SET_TYPE (17)
100 Received an error when trying to set the transfer mode to binary
101 or ASCII.
102
103 CURLE_PARTIAL_FILE (18)
104 A file transfer was shorter or larger than expected. This hap‐
105 pens when the server first reports an expected transfer size,
106 and then delivers data that doesn't match the previously given
107 size.
108
109 CURLE_FTP_COULDNT_RETR_FILE (19)
110 This was either a weird reply to a 'RETR' command or a zero byte
111 transfer complete.
112
113 CURLE_QUOTE_ERROR (21)
114 When sending custom "QUOTE" commands to the remote server, one
115 of the commands returned an error code that was 400 or higher
116 (for FTP) or otherwise indicated unsuccessful completion of the
117 command.
118
119 CURLE_HTTP_RETURNED_ERROR (22)
120 This is returned if CURLOPT_FAILONERROR(3) is set TRUE and the
121 HTTP server returns an error code that is >= 400.
122
123 CURLE_WRITE_ERROR (23)
124 An error occurred when writing received data to a local file, or
125 an error was returned to libcurl from a write callback.
126
127 CURLE_UPLOAD_FAILED (25)
128 Failed starting the upload. For FTP, the server typically denied
129 the STOR command. The error buffer usually contains the server's
130 explanation for this.
131
132 CURLE_READ_ERROR (26)
133 There was a problem reading a local file or an error returned by
134 the read callback.
135
136 CURLE_OUT_OF_MEMORY (27)
137 A memory allocation request failed. This is serious badness and
138 things are severely screwed up if this ever occurs.
139
140 CURLE_OPERATION_TIMEDOUT (28)
141 Operation timeout. The specified time-out period was reached ac‐
142 cording to the conditions.
143
144 CURLE_FTP_PORT_FAILED (30)
145 The FTP PORT command returned error. This mostly happens when
146 you haven't specified a good enough address for libcurl to use.
147 See CURLOPT_FTPPORT(3).
148
149 CURLE_FTP_COULDNT_USE_REST (31)
150 The FTP REST command returned error. This should never happen if
151 the server is sane.
152
153 CURLE_RANGE_ERROR (33)
154 The server does not support or accept range requests.
155
156 CURLE_HTTP_POST_ERROR (34)
157 This is an odd error that mainly occurs due to internal confu‐
158 sion.
159
160 CURLE_SSL_CONNECT_ERROR (35)
161 A problem occurred somewhere in the SSL/TLS handshake. You re‐
162 ally want the error buffer and read the message there as it pin‐
163 points the problem slightly more. Could be certificates (file
164 formats, paths, permissions), passwords, and others.
165
166 CURLE_BAD_DOWNLOAD_RESUME (36)
167 The download could not be resumed because the specified offset
168 was out of the file boundary.
169
170 CURLE_FILE_COULDNT_READ_FILE (37)
171 A file given with FILE:// couldn't be opened. Most likely be‐
172 cause the file path doesn't identify an existing file. Did you
173 check file permissions?
174
175 CURLE_LDAP_CANNOT_BIND (38)
176 LDAP cannot bind. LDAP bind operation failed.
177
178 CURLE_LDAP_SEARCH_FAILED (39)
179 LDAP search failed.
180
181 CURLE_FUNCTION_NOT_FOUND (41)
182 Function not found. A required zlib function was not found.
183
184 CURLE_ABORTED_BY_CALLBACK (42)
185 Aborted by callback. A callback returned "abort" to libcurl.
186
187 CURLE_BAD_FUNCTION_ARGUMENT (43)
188 A function was called with a bad parameter.
189
190 CURLE_INTERFACE_FAILED (45)
191 Interface error. A specified outgoing interface could not be
192 used. Set which interface to use for outgoing connections'
193 source IP address with CURLOPT_INTERFACE(3).
194
195 CURLE_TOO_MANY_REDIRECTS (47)
196 Too many redirects. When following redirects, libcurl hit the
197 maximum amount. Set your limit with CURLOPT_MAXREDIRS(3).
198
199 CURLE_UNKNOWN_OPTION (48)
200 An option passed to libcurl is not recognized/known. Refer to
201 the appropriate documentation. This is most likely a problem in
202 the program that uses libcurl. The error buffer might contain
203 more specific information about which exact option it concerns.
204
205 CURLE_SETOPT_OPTION_SYNTAX (49)
206 An option passed in to a setopt was wrongly formatted. See error
207 message for details about what option.
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 re‐
250 transmit, 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_AUTH_ERROR (94)
347 An authentication function returned an error.
348
349 CURLE_HTTP3 (95)
350 A problem was detected in the HTTP/3 layer. This is somewhat
351 generic and can be one out of several problems, see the error
352 buffer for details.
353
354 CURLE_QUIC_CONNECT_ERROR (96)
355 QUIC connection error. This error may be caused by an SSL li‐
356 brary error. QUIC is the protocol used for HTTP/3 transfers.
357
358 CURLE_SSL_CLIENTCERT (98)
359 SSL Client Certificate required.
360
361 CURLE_OBSOLETE*
362 These error codes will never be returned. They were used in an
363 old libcurl version and are currently unused.
364
366 This is the generic return code used by functions in the libcurl multi
367 interface. Also consider curl_multi_strerror(3).
368
369 CURLM_CALL_MULTI_PERFORM (-1)
370 This is not really an error. It means you should call
371 curl_multi_perform(3) again without doing select() or similar in
372 between. Before version 7.20.0 (released on February 9 2010)
373 this could be returned by curl_multi_perform(3), but in later
374 versions this return code is never used.
375
376 CURLM_CALL_MULTI_SOCKET (-1)
377 An alias for CURLM_CALL_MULTI_PERFORM. Never returned by modern
378 libcurl versions.
379
380 CURLM_OK (0)
381 Things are fine.
382
383 CURLM_BAD_HANDLE (1)
384 The passed-in handle is not a valid CURLM handle.
385
386 CURLM_BAD_EASY_HANDLE (2)
387 An easy handle was not good/valid. It could mean that it isn't
388 an easy handle at all, or possibly that the handle already is in
389 use by this or another multi handle.
390
391 CURLM_OUT_OF_MEMORY (3)
392 You are doomed.
393
394 CURLM_INTERNAL_ERROR (4)
395 This can only be returned if libcurl bugs. Please report it to
396 us!
397
398 CURLM_BAD_SOCKET (5)
399 The passed-in socket is not a valid one that libcurl already
400 knows about. (Added in 7.15.4)
401
402 CURLM_UNKNOWN_OPTION (6)
403 curl_multi_setopt() with unsupported option (Added in 7.15.4)
404
405 CURLM_ADDED_ALREADY (7)
406 An easy handle already added to a multi handle was attempted to
407 get added a second time. (Added in 7.32.1)
408
409 CURLM_RECURSIVE_API_CALL (8)
410 An API function was called from inside a callback.
411
412 CURLM_WAKEUP_FAILURE (9)
413 Wakeup is unavailable or failed.
414
415 CURLM_BAD_FUNCTION_ARGUMENT (10)
416 A function was called with a bad parameter.
417
419 The "share" interface will return a CURLSHcode to indicate when an er‐
420 ror has occurred. Also consider curl_share_strerror(3).
421
422 CURLSHE_OK (0)
423 All fine. Proceed as usual.
424
425 CURLSHE_BAD_OPTION (1)
426 An invalid option was passed to the function.
427
428 CURLSHE_IN_USE (2)
429 The share object is currently in use.
430
431 CURLSHE_INVALID (3)
432 An invalid share object was passed to the function.
433
434 CURLSHE_NOMEM (4)
435 Not enough memory was available. (Added in 7.12.0)
436
437 CURLSHE_NOT_BUILT_IN (5)
438 The requested sharing could not be done because the library you
439 use don't have that particular feature enabled. (Added in
440 7.23.0)
441
443 CURLUE_BAD_HANDLE (1)
444 An invalid CURLU pointer was passed as argument.
445
446 CURLUE_BAD_PARTPOINTER (2)
447 An invalid 'part' argument was passed as argument.
448
449 CURLUE_MALFORMED_INPUT (3)
450 A malformed input was passed to a URL API function.
451
452 CURLUE_BAD_PORT_NUMBER (4)
453 The port number was not a decimal number between 0 and 65535.
454
455 CURLUE_UNSUPPORTED_SCHEME (5)
456 This libcurl build doesn't support the given URL scheme.
457
458 CURLUE_URLDECODE (6)
459 URL decode error, most likely because of rubbish in the input.
460
461 CURLUE_OUT_OF_MEMORY (7)
462 A memory function failed.
463
464 CURLUE_USER_NOT_ALLOWED (8)
465 Credentials was passed in the URL when prohibited.
466
467 CURLUE_UNKNOWN_PART (9)
468 An unknown part ID was passed to a URL API function.
469
470 CURLUE_NO_SCHEME (10)
471 There is no scheme part in the URL.
472
473 CURLUE_NO_USER (11)
474 There is no user part in the URL.
475
476 CURLUE_NO_PASSWORD (12)
477 There is no password part in the URL.
478
479 CURLUE_NO_OPTIONS (13)
480 There is no options part in the URL.
481
482 CURLUE_NO_HOST (14)
483 There is no host part in the URL.
484
485 CURLUE_NO_PORT (15)
486 There is no port part in the URL.
487
488 CURLUE_NO_QUERY (16)
489 There is no query part in the URL.
490
491 CURLUE_NO_FRAGMENT (17)
492 There is no fragment part in the URL.
493
495 curl_easy_strerror(3), curl_multi_strerror(3), curl_share_strerror(3),
496 CURLOPT_ERRORBUFFER(3), CURLOPT_VERBOSE(3), CURLOPT_DEBUGFUNCTION(3)
497
498
499
500libcurl 7.79.1 August 23, 2021 libcurl-errors(3)