Mercurial > dropbear
diff dbutil.c @ 870:80af450dae76
Set IPTOS_LOWDELAY on PTY sessions only
author | Catalin Patulea <cat@vv.carleton.ca> |
---|---|
date | Mon, 02 Dec 2013 22:55:43 +0800 |
parents | 30ab30e46452 |
children | aa689d140928 |
line wrap: on
line diff
--- a/dbutil.c Mon Dec 02 22:15:17 2013 +0800 +++ b/dbutil.c Mon Dec 02 22:55:43 2013 +0800 @@ -177,28 +177,41 @@ } #endif /* DEBUG_TRACE */ -static void set_sock_priority(int sock) { - +void set_sock_nodelay(int sock) { int val; /* disable nagle */ val = 1; setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, (void*)&val, sizeof(val)); +} + +void set_sock_priority(int sock) { + + int val, rc; /* set the TOS bit for either ipv4 or ipv6 */ #ifdef IPTOS_LOWDELAY val = IPTOS_LOWDELAY; #if defined(IPPROTO_IPV6) && defined(IPV6_TCLASS) - setsockopt(sock, IPPROTO_IPV6, IPV6_TCLASS, (void*)&val, sizeof(val)); + rc = setsockopt(sock, IPPROTO_IPV6, IPV6_TCLASS, (void*)&val, sizeof(val)); + if (rc < 0) + dropbear_log(LOG_WARNING, "Couldn't set IPV6_TCLASS (%s)", + strerror(errno)); #endif - setsockopt(sock, IPPROTO_IP, IP_TOS, (void*)&val, sizeof(val)); + rc = setsockopt(sock, IPPROTO_IP, IP_TOS, (void*)&val, sizeof(val)); + if (rc < 0) + dropbear_log(LOG_WARNING, "Couldn't set IP_TOS (%s)", + strerror(errno)); #endif #ifdef SO_PRIORITY /* linux specific, sets QoS class. * 6 looks to be optimal for interactive traffic (see tc-prio(8) ). */ - val = 6; - setsockopt(sock, SOL_SOCKET, SO_PRIORITY, (void*) &val, sizeof(val)); + val = TC_PRIO_INTERACTIVE; + rc = setsockopt(sock, SOL_SOCKET, SO_PRIORITY, (void*) &val, sizeof(val)); + if (rc < 0) + dropbear_log(LOG_WARNING, "Couldn't set SO_PRIORITY (%s)", + strerror(errno)); #endif } @@ -290,7 +303,7 @@ } #endif - set_sock_priority(sock); + set_sock_nodelay(sock); if (bind(sock, res->ai_addr, res->ai_addrlen) < 0) { err = errno; @@ -429,7 +442,7 @@ TRACE(("Error connecting: %s", strerror(err))) } else { /* Success */ - set_sock_priority(sock); + set_sock_nodelay(sock); } freeaddrinfo(res0);