do not set TCP_NODELAY on unix domain sockets and do not log errors about optional setsockopt() calls; fixes #3682
Costa Tsaousis (ktsaou) committed
May 8, 2018 at 01:37 UTC
f02e9d17bfe0019bddf5e30cb5180f1dd6245f50
2 files changed
+6
-4
src/web_client.h
+1
@@ -70,6 +70,7 @@ typedef enum web_client_flags {
70
#define web_client_set_tcp(w) web_client_flag_set(w, WEB_CLIENT_FLAG_TCP_CLIENT)
71
#define web_client_set_unix(w) web_client_flag_set(w, WEB_CLIENT_FLAG_UNIX_CLIENT)
72
#define web_client_check_unix(w) web_client_flag_check(w, WEB_CLIENT_FLAG_UNIX_CLIENT)
73
+#define web_client_check_tcp(w) web_client_flag_check(w, WEB_CLIENT_FLAG_TCP_CLIENT)
74
75
#define web_client_is_corkable(w) web_client_flag_check(w, WEB_CLIENT_FLAG_TCP_CLIENT)
76
src/web_server.c
+5
-4
@@ -335,12 +335,13 @@ static void web_client_release(struct web_client *w) {
335
336
static void web_client_initialize_connection(struct web_client *w) {
337
int flag = 1;
338
- if(setsockopt(w->ifd, IPPROTO_TCP, TCP_NODELAY, (char *) &flag, sizeof(int)) != 0)
339
- error("%llu: failed to enable TCP_NODELAY on socket fd %d.", w->id, w->ifd);
338
+
339
+ if(unlikely(web_client_check_tcp(w) && setsockopt(w->ifd, IPPROTO_TCP, TCP_NODELAY, (char *) &flag, sizeof(int)) != 0))
340
+ debug(D_WEB_CLIENT, "%llu: failed to enable TCP_NODELAY on socket fd %d.", w->id, w->ifd);
341
342
flag = 1;
342
- if(setsockopt(w->ifd, SOL_SOCKET, SO_KEEPALIVE, (char *) &flag, sizeof(int)) != 0)
343
- error("%llu: failed to enable SO_KEEPALIVE on socket fd %d.", w->id, w->ifd);
343
+ if(unlikely(setsockopt(w->ifd, SOL_SOCKET, SO_KEEPALIVE, (char *) &flag, sizeof(int)) != 0))
344
+ debug(D_WEB_CLIENT, "%llu: failed to enable SO_KEEPALIVE on socket fd %d.", w->id, w->ifd);
345
346
web_client_update_acl_matches(w);
347