1
0
mirror of https://github.com/moparisthebest/curl synced 2024-11-16 06:25:03 -05:00

libcurl-thread.3: expand somewhat on the NO_SIGNAL motivation

Multi-threaded applictions basically MUST set CURLOPT_NO_SIGNAL to 1L to
avoid the risk of getting a SIGPIPE.

Either way, a multi-threaded application that uses libcurl/openssl needs
to have a signhandler for or ignore SIGPIPE on its own.

Based on discussions in #2800
Closes #2904
This commit is contained in:
Daniel Stenberg 2018-08-21 14:52:17 +02:00
parent 3c7511b92e
commit 1b8ed4ad23
No known key found for this signature in database
GPG Key ID: 5CC908FDB71E12C2

View File

@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___ .\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____| .\" * \___|\___/|_| \_\_____|
.\" * .\" *
.\" * Copyright (C) 2015 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al. .\" * Copyright (C) 2015 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
.\" * .\" *
.\" * This software is licensed as described in the file COPYING, which .\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms .\" * you should have received as part of this distribution. The terms
@ -79,8 +79,14 @@ all handles. Everything will or might work fine except that timeouts are not
honored during the DNS lookup - which you can work around by building libcurl honored during the DNS lookup - which you can work around by building libcurl
with c-ares or threaded-resolver support. c-ares is a library that provides with c-ares or threaded-resolver support. c-ares is a library that provides
asynchronous name resolves. On some platforms, libcurl simply will not asynchronous name resolves. On some platforms, libcurl simply will not
function properly multi-threaded unless the \fICURLOPT_NOSIGNAL(3)\fP option is function properly multi-threaded unless the \fICURLOPT_NOSIGNAL(3)\fP option
set. is set.
When \fICURLOPT_NOSIGNAL(3)\fP is set to 1L, your application needs to deal
with the risk of a SIGPIPE (that at least the OpenSSL backend can
trigger). Note that setting \fICURLOPT_NOSIGNAL(3)\fP to 0L will not work in a
threaded situation as there will be race where libcurl risks restoring the
former signal handler while another thread should still ignore it.
.IP "Name resolving" .IP "Name resolving"
\fBgethostby* functions and other system calls.\fP These functions, provided \fBgethostby* functions and other system calls.\fP These functions, provided
by your operating system, must be thread safe. It is very important that by your operating system, must be thread safe. It is very important that