From: Mark Kettenis <kette...@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

_______________________________________________
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to