From: Willy Tarreau Date: Wed, 19 Aug 2009 09:22:33 +0000 (+0200) Subject: [CLEANUP] remove ifdef MSG_NOSIGNAL and define it instead X-Git-Tag: v1.4-dev3~33 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d6d06909dae55bd594f5a9d6bf54dad04eae382f;p=thirdparty%2Fhaproxy.git [CLEANUP] remove ifdef MSG_NOSIGNAL and define it instead ifdefs are really annoying in the code. Define MSG_NOSIGNAL to zero when undefined and remove associated ifdefs. --- diff --git a/include/common/compat.h b/include/common/compat.h index 8d406e5c46..dec5d7d430 100644 --- a/include/common/compat.h +++ b/include/common/compat.h @@ -54,6 +54,11 @@ #define SHUT_WR 1 #endif +/* only Linux defines it */ +#ifndef MSG_NOSIGNAL +#define MSG_NOSIGNAL 0 +#endif + /* AIX does not define MSG_DONTWAIT. We'll define it to zero, and test it * wherever appropriate. */ diff --git a/src/checks.c b/src/checks.c index 211a2ec59a..00751fefd9 100644 --- a/src/checks.c +++ b/src/checks.c @@ -359,11 +359,7 @@ static int event_srv_chk_w(int fd) memcpy(s->proxy->check_req + 11, &gmt_time, 4); } -#ifndef MSG_NOSIGNAL - ret = send(fd, s->proxy->check_req, s->proxy->check_len, MSG_DONTWAIT); -#else ret = send(fd, s->proxy->check_req, s->proxy->check_len, MSG_DONTWAIT | MSG_NOSIGNAL); -#endif if (ret == s->proxy->check_len) { /* we allow up to if nonzero for a responce */ if (s->proxy->timeout.check) @@ -455,15 +451,11 @@ static int event_srv_chk_r(int fd) goto out_wakeup; } -#ifndef MSG_NOSIGNAL - len = recv(fd, trash, sizeof(trash), 0); -#else /* Warning! Linux returns EAGAIN on SO_ERROR if data are still available * but the connection was closed on the remote end. Fortunately, recv still * works correctly and we don't need to do the getsockopt() on linux. */ len = recv(fd, trash, sizeof(trash), MSG_NOSIGNAL); -#endif if (unlikely(len < 0 && errno == EAGAIN)) { /* we want some polling to happen first */ fdtab[fd].ev &= ~FD_POLL_IN; diff --git a/src/haproxy.c b/src/haproxy.c index dd03e32aa4..237fa253b2 100644 --- a/src/haproxy.c +++ b/src/haproxy.c @@ -937,7 +937,7 @@ int main(int argc, char **argv) /* on very high loads, a sigpipe sometimes happen just between the * getsockopt() which tells "it's OK to write", and the following write :-( */ -#if !defined(MSG_NOSIGNAL) || defined(CONFIG_HAP_LINUX_SPLICE) +#if !MSG_NOSIGNAL || defined(CONFIG_HAP_LINUX_SPLICE) signal(SIGPIPE, SIG_IGN); #endif diff --git a/src/log.c b/src/log.c index 8d71eae3f5..b323d7e89a 100644 --- a/src/log.c +++ b/src/log.c @@ -23,6 +23,7 @@ #include #include +#include #include #include @@ -30,10 +31,6 @@ #include -#ifndef MSG_NOSIGNAL -#define MSG_NOSIGNAL (0) -#endif /* !MSG_NOSIGNAL */ - const char *log_facilities[NB_LOG_FACILITIES] = { "kern", "user", "mail", "daemon", "auth", "syslog", "lpr", "news", diff --git a/src/stream_sock.c b/src/stream_sock.c index 3a69d1f197..f563755edd 100644 --- a/src/stream_sock.c +++ b/src/stream_sock.c @@ -313,8 +313,9 @@ int stream_sock_read(int fd) { /* * 2. read the largest possible block */ -#ifndef MSG_NOSIGNAL - { + if (MSG_NOSIGNAL) { + ret = recv(fd, b->r, max, MSG_NOSIGNAL); + } else { int skerr; socklen_t lskerr = sizeof(skerr); @@ -324,9 +325,7 @@ int stream_sock_read(int fd) { else ret = recv(fd, b->r, max, 0); } -#else - ret = recv(fd, b->r, max, MSG_NOSIGNAL); -#endif + if (ret > 0) { b->r += ret; b->l += ret; @@ -606,8 +605,9 @@ static int stream_sock_write_loop(struct stream_interface *si, struct buffer *b) } #endif -#ifndef MSG_NOSIGNAL - { + if (MSG_NOSIGNAL) { + ret = send(si->fd, b->w, max, MSG_DONTWAIT | MSG_NOSIGNAL); + } else { int skerr; socklen_t lskerr = sizeof(skerr); @@ -617,9 +617,6 @@ static int stream_sock_write_loop(struct stream_interface *si, struct buffer *b) else ret = send(si->fd, b->w, max, MSG_DONTWAIT); } -#else - ret = send(si->fd, b->w, max, MSG_DONTWAIT | MSG_NOSIGNAL); -#endif if (ret > 0) { if (fdtab[si->fd].state == FD_STCONN)