From 6b975c308c9b93b058a0d0f718bb350ae64b9dd1 Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Thu, 22 Aug 2002 19:39:19 +0000 Subject: Markus F.X.J. Oberhumer added a section about NOSIGNAL and libcurl in multi-threaded use --- docs/libcurl-the-guide | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/docs/libcurl-the-guide b/docs/libcurl-the-guide index 8c41693f5..a196d8ead 100644 --- a/docs/libcurl-the-guide +++ b/docs/libcurl-the-guide @@ -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 -- cgit v1.2.3