From b84b71f5241e18ee3e6bde5bdb9d257c71b56d5f Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Sat, 3 May 2008 13:43:35 +0000 Subject: - Jean-Francois Bertrand reported a libcurl crash with CURLOPT_TCP_NODELAY since libcurl used getprotobyname() and that isn't thread-safe. We now switched to use IPPROTO_TCP unconditionally, but perhaps the proper fix is to detect the thread-safe version of the function and use that. http://curl.haxx.se/mail/lib-2008-05/0011.html --- lib/connect.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/connect.c b/lib/connect.c index dcccfe4d2..33e4e0777 100644 --- a/lib/connect.c +++ b/lib/connect.c @@ -685,7 +685,14 @@ static void tcpnodelay(struct connectdata *conn, socklen_t onoff = (socklen_t) data->set.tcp_nodelay; int proto = IPPROTO_TCP; -#ifdef HAVE_GETPROTOBYNAME +#if 0 + /* The use of getprotobyname() is disabled since it isn't thread-safe on + numerous systems. On these getprotobyname_r() should be used instead, but + that exists in at least one 4 arg version and one 5 arg version, and + since the proto number rarely changes anyway we now just use the hard + coded number. The "proper" fix would need a configure check for the + correct function much in the same style the gethostbyname_r versions are + detected. */ struct protoent *pe = getprotobyname("tcp"); if(pe) proto = pe->p_proto; -- cgit v1.2.3