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);