aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Wu <peter@lekensteyn.nl>2014-11-27 23:59:20 +0100
committerDaniel Stenberg <daniel@haxx.se>2014-12-04 02:52:18 +0100
commitfb7d7e0022f22035449bbc506068004f0568f8ae (patch)
tree14f73e54a70018bb28d0991ff32f5133786a41fb
parent8ef77547d089a1c59c50a2d9c0ea66005cba5ceb (diff)
sws: restrict TCP_NODELAY to IP sockets
TCP_NODELAY does not make sense for Unix sockets, so enable it only if the socket is using IP. Signed-off-by: Peter Wu <peter@lekensteyn.nl>
-rw-r--r--tests/server/sws.c73
1 files changed, 44 insertions, 29 deletions
diff --git a/tests/server/sws.c b/tests/server/sws.c
index 400d5d98d..ebc70d6e0 100644
--- a/tests/server/sws.c
+++ b/tests/server/sws.c
@@ -326,6 +326,21 @@ static void restore_signal_handlers(void)
#endif
}
+/* returns true if the current socket is an IP one */
+static bool socket_domain_is_ip(void)
+{
+ switch(socket_domain) {
+ case AF_INET:
+#ifdef ENABLE_IPV6
+ case AF_INET6:
+#endif
+ return true;
+ default:
+ /* case AF_UNIX: */
+ return false;
+ }
+}
+
/* based on the testno, parse the correct server commands */
static int parse_servercmd(struct httprequest *req)
{
@@ -1286,9 +1301,6 @@ static curl_socket_t connect_to(const char *ipaddr, unsigned short port)
int rc;
const char *op_br = "";
const char *cl_br = "";
-#ifdef TCP_NODELAY
- curl_socklen_t flag;
-#endif
#ifdef ENABLE_IPV6
if(socket_domain == AF_INET6) {
@@ -1313,13 +1325,15 @@ static curl_socket_t connect_to(const char *ipaddr, unsigned short port)
}
#ifdef TCP_NODELAY
- /* Disable the Nagle algorithm */
- flag = 1;
- if(0 != setsockopt(serverfd, IPPROTO_TCP, TCP_NODELAY,
- (void *)&flag, sizeof(flag)))
- logmsg("====> TCP_NODELAY for server conection failed");
- else
- logmsg("TCP_NODELAY set for server conection");
+ if(socket_domain_is_ip()) {
+ /* Disable the Nagle algorithm */
+ curl_socklen_t flag = 1;
+ if(0 != setsockopt(serverfd, IPPROTO_TCP, TCP_NODELAY,
+ (void *)&flag, sizeof(flag)))
+ logmsg("====> TCP_NODELAY for server conection failed");
+ else
+ logmsg("TCP_NODELAY set for server conection");
+ }
#endif
switch(socket_domain) {
@@ -1402,9 +1416,6 @@ static void http_connect(curl_socket_t *infdp,
bool poll_server_rd[2] = { TRUE, TRUE };
bool poll_client_wr[2] = { TRUE, TRUE };
bool poll_server_wr[2] = { TRUE, TRUE };
-#ifdef TCP_NODELAY
- curl_socklen_t flag;
-#endif
bool primary = FALSE;
bool secondary = FALSE;
int max_tunnel_idx; /* CTRL or DATA */
@@ -1518,13 +1529,15 @@ static void http_connect(curl_socket_t *infdp,
memset(&req2, 0, sizeof(req2));
logmsg("====> Client connect DATA");
#ifdef TCP_NODELAY
- /* Disable the Nagle algorithm */
- flag = 1;
- if(0 != setsockopt(datafd, IPPROTO_TCP, TCP_NODELAY,
- (void *)&flag, sizeof(flag)))
- logmsg("====> TCP_NODELAY for client DATA conection failed");
- else
- logmsg("TCP_NODELAY set for client DATA conection");
+ if(socket_domain_is_ip()) {
+ /* Disable the Nagle algorithm */
+ curl_socklen_t flag = 1;
+ if(0 != setsockopt(datafd, IPPROTO_TCP, TCP_NODELAY,
+ (void *)&flag, sizeof(flag)))
+ logmsg("====> TCP_NODELAY for client DATA conection failed");
+ else
+ logmsg("TCP_NODELAY set for client DATA conection");
+ }
#endif
req2.pipelining = FALSE;
init_httprequest(&req2);
@@ -1838,15 +1851,17 @@ static curl_socket_t accept_connection(curl_socket_t sock)
num_sockets += 1;
#ifdef TCP_NODELAY
- /*
- * Disable the Nagle algorithm to make it easier to send out a large
- * response in many small segments to torture the clients more.
- */
- if(0 != setsockopt(msgsock, IPPROTO_TCP, TCP_NODELAY,
- (void *)&flag, sizeof(flag)))
- logmsg("====> TCP_NODELAY failed");
- else
- logmsg("TCP_NODELAY set");
+ if(socket_domain_is_ip()) {
+ /*
+ * Disable the Nagle algorithm to make it easier to send out a large
+ * response in many small segments to torture the clients more.
+ */
+ if(0 != setsockopt(msgsock, IPPROTO_TCP, TCP_NODELAY,
+ (void *)&flag, sizeof(flag)))
+ logmsg("====> TCP_NODELAY failed");
+ else
+ logmsg("TCP_NODELAY set");
+ }
#endif
return msgsock;