Module Name:    src
Committed By:   plunky
Date:           Sun Oct 14 08:31:35 UTC 2012

Modified Files:
        src/usr.sbin/btpand: client.c server.c

Log Message:
add code to ensure that SO_SNDBUF is large enough on client connections,
as was previously done for server mode


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 src/usr.sbin/btpand/client.c
cvs rdiff -u -r1.7 -r1.8 src/usr.sbin/btpand/server.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/usr.sbin/btpand/client.c
diff -u src/usr.sbin/btpand/client.c:1.6 src/usr.sbin/btpand/client.c:1.7
--- src/usr.sbin/btpand/client.c:1.6	Mon Aug 29 20:38:55 2011
+++ src/usr.sbin/btpand/client.c	Sun Oct 14 08:31:35 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: client.c,v 1.6 2011/08/29 20:38:55 joerg Exp $	*/
+/*	$NetBSD: client.c,v 1.7 2012/10/14 08:31:35 plunky Exp $	*/
 
 /*-
  * Copyright (c) 2008-2009 Iain Hibbert
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: client.c,v 1.6 2011/08/29 20:38:55 joerg Exp $");
+__RCSID("$NetBSD: client.c,v 1.7 2012/10/14 08:31:35 plunky Exp $");
 
 #include <bluetooth.h>
 #include <errno.h>
@@ -45,7 +45,7 @@ client_init(void)
 	struct sockaddr_bt sa;
 	channel_t *chan;
 	socklen_t len;
-	int fd, bufsize;
+	int fd, n;
 	uint16_t mru, mtu;
 
 	if (bdaddr_any(&remote_bdaddr))
@@ -102,17 +102,15 @@ client_init(void)
 		exit(EXIT_FAILURE);
 	}
 
-	len = sizeof(bufsize);
-	if (getsockopt(fd, SOL_SOCKET, SO_RCVBUF, &bufsize, &len) == -1) {
+	len = sizeof(n);
+	if (getsockopt(fd, SOL_SOCKET, SO_RCVBUF, &n, &len) == -1) {
 		log_err("Could not read SO_RCVBUF");
 		exit(EXIT_FAILURE);
 	}
-	if (bufsize < 10 * mru) {
-		bufsize = 10 * mru;
-		if (setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &bufsize,
-		    sizeof(bufsize)) == -1)
-			log_info("Could not increase SO_RCVBUF (from %d)",
-			    bufsize);
+	if (n < 10 * mru) {
+		n = 10 * mru;
+		if (setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &n, sizeof(n)) == -1)
+			log_info("Could not increase SO_RCVBUF (to %d)", n);
 	}
 
 	len = sizeof(mtu);
@@ -125,6 +123,27 @@ client_init(void)
 		exit(EXIT_FAILURE);
 	}
 
+	len = sizeof(n);
+	if (getsockopt(fd, SOL_SOCKET, SO_SNDBUF, &n, &len) == -1) {
+		log_err("Could not get socket send buffer size: %m");
+		close(fd);
+		return;
+	}
+	if (n < (mtu * 2)) {
+		n = mtu * 2;
+		if (setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &n, sizeof(n)) == -1) {
+			log_err("Could not set socket send buffer size (%d): %m", n);
+			close(fd);
+			return;
+		}
+	}
+	n = mtu;
+	if (setsockopt(fd, SOL_SOCKET, SO_SNDLOWAT, &n, sizeof(n)) == -1) {
+		log_err("Could not set socket low water mark (%d): %m", n);
+		close(fd);
+		return;
+	}
+
 	chan = channel_alloc();
 	if (chan == NULL)
 		exit(EXIT_FAILURE);

Index: src/usr.sbin/btpand/server.c
diff -u src/usr.sbin/btpand/server.c:1.7 src/usr.sbin/btpand/server.c:1.8
--- src/usr.sbin/btpand/server.c:1.7	Tue Feb  8 21:59:50 2011
+++ src/usr.sbin/btpand/server.c	Sun Oct 14 08:31:35 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: server.c,v 1.7 2011/02/08 21:59:50 plunky Exp $	*/
+/*	$NetBSD: server.c,v 1.8 2012/10/14 08:31:35 plunky Exp $	*/
 
 /*-
  * Copyright (c) 2008-2009 Iain Hibbert
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: server.c,v 1.7 2011/02/08 21:59:50 plunky Exp $");
+__RCSID("$NetBSD: server.c,v 1.8 2012/10/14 08:31:35 plunky Exp $");
 
 #include <sys/ioctl.h>
 
@@ -134,7 +134,7 @@ server_read(int s, short ev, void *arg)
 	struct sockaddr_bt ra, la;
 	channel_t *chan;
 	socklen_t len;
-	int fd, n, bufsize;
+	int fd, n;
 	uint16_t mru, mtu;
 
 	assert(server_count < server_limit);
@@ -163,18 +163,16 @@ server_read(int s, short ev, void *arg)
 		return;
 	}
 
-	len = sizeof(bufsize);
-	if (getsockopt(fd, SOL_SOCKET, SO_RCVBUF, &bufsize, &len) == -1) {
+	len = sizeof(n);
+	if (getsockopt(fd, SOL_SOCKET, SO_RCVBUF, &n, &len) == -1) {
 		log_err("Could not read SO_RCVBUF");
 		close(fd);
 		return;
 	}
-	if (bufsize < 10 * mru) {
-		bufsize = 10 * mru;
-		if (setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &bufsize,
-		    sizeof(bufsize)) == -1)
-			log_info("Could not increase SO_RCVBUF (from %d)",
-			    bufsize);
+	if (n < 10 * mru) {
+		n = 10 * mru;
+		if (setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &n, sizeof(n)) == -1)
+			log_info("Could not increase SO_RCVBUF (to %d)", n);
 	}
 
 	len = sizeof(mtu);
@@ -195,7 +193,6 @@ server_read(int s, short ev, void *arg)
 		close(fd);
 		return;
 	}
-
 	if (n < (mtu * 2)) {
 		n = mtu * 2;
 		if (setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &n, sizeof(n)) == -1) {
@@ -204,7 +201,6 @@ server_read(int s, short ev, void *arg)
 			return;
 		}
 	}
-
 	n = mtu;
 	if (setsockopt(fd, SOL_SOCKET, SO_SNDLOWAT, &n, sizeof(n)) == -1) {
 		log_err("Could not set socket low water mark (%d): %m", n);

Reply via email to