Loading docs/libcurl-the-guide +18 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading Loading
docs/libcurl-the-guide +18 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading