[PATCH libxtrans] Increase UNIX socket buffer size

Mark Kettenis mark.kettenis at xs4all.nl
Sat Mar 29 15:51:49 PDT 2014


From: Mark Kettenis <kettenis at openbsd.org>

Some systems provide a really small default buffer size for UNIX sockets.
Bump it up to 64k if necessary such that large transfers (such as
XGetImage() on a 8-megapixel image) don't take tens of seconds.
---
 Xtranssock.c | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/Xtranssock.c b/Xtranssock.c
index fdf1dd7..6cde146 100644
--- a/Xtranssock.c
+++ b/Xtranssock.c
@@ -445,6 +445,27 @@ TRANS(SocketOpen) (int i, int type)
     }
 #endif
 
+    /*
+     * Some systems provide a really small default buffer size for
+     * UNIX sockets.  Bump it up a bit such that large transfers don't
+     * proceed at glacial speed.
+     */
+#ifdef SO_SNDBUF
+    if (Sockettrans2devtab[i].family == AF_UNIX)
+    {
+	SOCKLEN_T len = sizeof (int);
+	int val;
+
+	if (getsockopt (ciptr->fd, SOL_SOCKET, SO_SNDBUF,
+	    (char *) &val, &len) == 0 && val < 64 * 1024)
+	{
+	    val = 64 * 1024;
+	    setsockopt (ciptr->fd, SOL_SOCKET, SO_SNDBUF,
+	        (char *) &val, sizeof (int));
+	}
+    }
+#endif
+
     return ciptr;
 }
 
-- 
1.9.0



More information about the xorg-devel mailing list