Commit 6b975c30 authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

Markus F.X.J. Oberhumer added a section about NOSIGNAL and libcurl in

multi-threaded use
parent 74be55a4
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
@@ -116,6 +116,7 @@ Global Preparation
 Repeated calls to curl_global_init() and curl_global_cleanup() should be
 avoided. They should only be called once each.


Handle the Easy libcurl

 libcurl version 7 is oriented around the so called easy interface. All
@@ -215,6 +216,23 @@ Handle the Easy libcurl
 previous


Multi-threading issues

 libcurl is completely thread safe, except for two issues: signals and alarm
 handlers. Signals are needed for a SIGPIPE handler, and the alarm() syscall
 is used to catch timeouts (mostly during DNS lookup).

 So when using multiple threads you should first ignore SIGPIPE in your main
 thread and set the CURLOPT_NOSIGNAL option to TRUE for all handles.

 Everything will work fine except that timeouts are not honored during the DNS
 lookup - this would require some sort of asynchronous DNS lookup (which is
 planned for a future libcurl version).

 For SIGPIPE info see the UNIX Socket FAQ at
 http://www.unixguide.net/network/socketfaq/2.22.shtml


When It Doesn't Work

 There will always be times when the transfer fails for some reason. You might