mirror of
https://github.com/curl/curl.git
synced 2024-11-27 05:50:21 +08:00
Markus F.X.J. Oberhumer added a section about NOSIGNAL and libcurl in
multi-threaded use
This commit is contained in:
parent
74be55a477
commit
6b975c308c
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user