1
0
mirror of https://github.com/moparisthebest/curl synced 2024-12-21 23:58:49 -05:00

If HAVE_MSG_NOSIGNAL is set, we use MSG_NOSIGNAL when we call send() and

recv() and we no longer attempt to ignore the SIGPIPE signal.
This commit is contained in:
Daniel Stenberg 2003-12-02 10:12:44 +00:00
parent 909887f310
commit 2cf209d3f7
2 changed files with 19 additions and 10 deletions

View File

@ -116,6 +116,15 @@ defined(HAVE_LIBSSL) && defined(HAVE_LIBCRYPTO)
#endif #endif
#endif #endif
#ifdef HAVE_MSG_NOSIGNAL
/* If we have the MSG_NOSIGNAL define, we make sure to use that in the forth
argument to send() and recv() */
#define SEND_4TH_ARG MSG_NOSIGNAL
#else
#define SEND_4TH_ARG 0
#endif
/* Below we define four functions. They should /* Below we define four functions. They should
1. close a socket 1. close a socket
2. read from a socket 2. read from a socket
@ -139,14 +148,14 @@ defined(HAVE_LIBSSL) && defined(HAVE_LIBCRYPTO)
#if !defined(__GNUC__) || defined(__MINGW32__) #if !defined(__GNUC__) || defined(__MINGW32__)
#define sclose(x) closesocket(x) #define sclose(x) closesocket(x)
#define sread(x,y,z) recv(x,y,z,0) #define sread(x,y,z) recv(x,y,z, SEND_4TH_ARG)
#define swrite(x,y,z) (size_t)send(x,y,z,0) #define swrite(x,y,z) (size_t)send(x,y,z, SEND_4TH_ARG)
#undef HAVE_ALARM #undef HAVE_ALARM
#else #else
/* gcc-for-win is still good :) */ /* gcc-for-win is still good :) */
#define sclose(x) close(x) #define sclose(x) close(x)
#define sread(x,y,z) recv(x,y,z,0) #define sread(x,y,z) recv(x,y,z, SEND_4TH_ARG)
#define swrite(x,y,z) send(x,y,z,0) #define swrite(x,y,z) send(x,y,z, SEND_4TH_ARG)
#define HAVE_ALARM #define HAVE_ALARM
#endif #endif
@ -171,12 +180,12 @@ defined(HAVE_LIBSSL) && defined(HAVE_LIBCRYPTO)
#ifdef __BEOS__ #ifdef __BEOS__
#define sclose(x) closesocket(x) #define sclose(x) closesocket(x)
#define sread(x,y,z) (ssize_t)recv(x,y,z,0) #define sread(x,y,z) (ssize_t)recv(x,y,z, SEND_4TH_ARG)
#define swrite(x,y,z) (ssize_t)send(x,y,z,0) #define swrite(x,y,z) (ssize_t)send(x,y,z, SEND_4TH_ARG)
#else #else
#define sclose(x) close(x) #define sclose(x) close(x)
#define sread(x,y,z) recv(x,y,z,0) #define sread(x,y,z) recv(x,y,z, SEND_4TH_ARG)
#define swrite(x,y,z) send(x,y,z,0) #define swrite(x,y,z) send(x,y,z, SEND_4TH_ARG)
#endif #endif
#define HAVE_ALARM #define HAVE_ALARM

View File

@ -1457,7 +1457,7 @@ CURLcode Curl_pretransfer(struct SessionHandle *data)
* different ports! */ * different ports! */
data->state.allow_port = TRUE; data->state.allow_port = TRUE;
#if defined(HAVE_SIGNAL) && defined(SIGPIPE) #if defined(HAVE_SIGNAL) && defined(SIGPIPE) && !defined(HAVE_MSG_NOSIGNAL)
/************************************************************* /*************************************************************
* Tell signal handler to ignore SIGPIPE * Tell signal handler to ignore SIGPIPE
*************************************************************/ *************************************************************/
@ -1473,7 +1473,7 @@ CURLcode Curl_pretransfer(struct SessionHandle *data)
CURLcode Curl_posttransfer(struct SessionHandle *data) CURLcode Curl_posttransfer(struct SessionHandle *data)
{ {
#if defined(HAVE_SIGNAL) && defined(SIGPIPE) #if defined(HAVE_SIGNAL) && defined(SIGPIPE) && !defined(HAVE_MSG_NOSIGNAL)
/* restore the signal handler for SIGPIPE before we get back */ /* restore the signal handler for SIGPIPE before we get back */
if(!data->set.no_signal) if(!data->set.no_signal)
signal(SIGPIPE, data->state.prev_signal); signal(SIGPIPE, data->state.prev_signal);