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

multi-threaded use
This commit is contained in:
Daniel Stenberg 2002-08-22 19:39:19 +00:00
parent 74be55a477
commit 6b975c308c

View File

@ -116,6 +116,7 @@ Global Preparation
Repeated calls to curl_global_init() and curl_global_cleanup() should be Repeated calls to curl_global_init() and curl_global_cleanup() should be
avoided. They should only be called once each. avoided. They should only be called once each.
Handle the Easy libcurl Handle the Easy libcurl
libcurl version 7 is oriented around the so called easy interface. All libcurl version 7 is oriented around the so called easy interface. All
@ -215,6 +216,23 @@ Handle the Easy libcurl
previous 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 When It Doesn't Work
There will always be times when the transfer fails for some reason. You might There will always be times when the transfer fails for some reason. You might