diff options
Diffstat (limited to 'main/uwsgi/0004-core-socket-move-SO_REUSEADDR-setting-to-create_serv.patch')
-rw-r--r-- | main/uwsgi/0004-core-socket-move-SO_REUSEADDR-setting-to-create_serv.patch | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/main/uwsgi/0004-core-socket-move-SO_REUSEADDR-setting-to-create_serv.patch b/main/uwsgi/0004-core-socket-move-SO_REUSEADDR-setting-to-create_serv.patch new file mode 100644 index 000000000..904828b43 --- /dev/null +++ b/main/uwsgi/0004-core-socket-move-SO_REUSEADDR-setting-to-create_serv.patch @@ -0,0 +1,73 @@ +From 4f4f9b93aae55e40dc7f92e19a7e5080a06ce798 Mon Sep 17 00:00:00 2001 +From: Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> +Date: Thu, 2 Jan 2014 00:05:01 +0200 +Subject: [PATCH 4/5] core/socket: move SO_REUSEADDR setting to + create_server_socket + +--- + core/socket.c | 21 +++++++++------------ + 1 file changed, 9 insertions(+), 12 deletions(-) + +diff --git a/core/socket.c b/core/socket.c +index 3eed477..6d5d7d7 100644 +--- a/core/socket.c ++++ b/core/socket.c +@@ -84,6 +84,15 @@ static int create_server_socket(int domain, int type) { + return -1; + } + ++ if (domain != AF_UNIX) { ++ int reuse = 1; ++ if (setsockopt(serverfd, SOL_SOCKET, SO_REUSEADDR, (const void *) &reuse, sizeof(int)) < 0) { ++ uwsgi_error("SO_REUSEADDR setsockopt()"); ++ uwsgi_nuclear_blast(); ++ return -1; ++ } ++ } ++ + if (type == SOCK_STREAM) { + if (uwsgi.so_sndbuf) { + socklen_t sndbuf = (socklen_t) uwsgi.so_sndbuf; +@@ -248,7 +257,6 @@ int bind_to_udp(char *socket_name, int multicast, int broadcast) { + struct sockaddr_in uws_addr; + char *udp_port; + int bcast = 1; +- int reuse = 1; + + struct ip_mreq mc; + +@@ -296,10 +304,6 @@ int bind_to_udp(char *socket_name, int multicast, int broadcast) { + serverfd = create_server_socket(AF_INET, SOCK_DGRAM); + if (serverfd < 0) return -1; + +- if (setsockopt(serverfd, SOL_SOCKET, SO_REUSEADDR, (const void *) &reuse, sizeof(int)) < 0) { +- uwsgi_error("setsockopt()"); +- } +- + if (multicast) { + // if multicast is enabled remember to bind to INADDR_ANY + uws_addr.sin_addr.s_addr = INADDR_ANY; +@@ -651,7 +655,6 @@ int bind_to_tcp(char *socket_name, int listen_queue, char *tcp_port) { + #else + struct sockaddr_in uws_addr; + #endif +- int reuse = 1; + int family = AF_INET; + socklen_t addr_len = sizeof(struct sockaddr_in); + +@@ -672,12 +675,6 @@ int bind_to_tcp(char *socket_name, int listen_queue, char *tcp_port) { + serverfd = create_server_socket(family, SOCK_STREAM); + if (serverfd < 0) return -1; + +- if (setsockopt(serverfd, SOL_SOCKET, SO_REUSEADDR, (const void *) &reuse, sizeof(int)) < 0) { +- uwsgi_error("SO_REUSEADDR setsockopt()"); +- uwsgi_nuclear_blast(); +- return -1; +- } +- + #ifdef __linux__ + #ifndef IP_FREEBIND + #define IP_FREEBIND 15 +-- +1.8.4.2 + |