]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
rx-user-socket-buffer-sizes-20090110
authorJeffrey Altman <jaltman@your-file-system.com>
Sun, 11 Jan 2009 04:24:37 +0000 (04:24 +0000)
committerDerrick Brashear <shadow|account-1000005@unknown>
Thu, 17 Dec 2009 06:22:40 +0000 (22:22 -0800)
LICENSE MIT

if the socket buffer size specified by the configuration is too large
to be applied, do not drop down immediately to 32766 bytes.  Instead
try increasingly smaller values trying to find the largest one that
works.  use the same value for the send buf size as well.
(cherry picked from commit 5b0e23567e1ed64f448bb3253ad90d39cad31271)

Change-Id: I7cb1ded895458d099be5aeffc712a914193e18c0
Reviewed-on: http://gerrit.openafs.org/922
Reviewed-by: Derrick Brashear <shadow@dementia.org>
Tested-by: Derrick Brashear <shadow@dementia.org>
src/rx/rx_user.c

index 6630baaece4694455e83b256b011e313e646b5c3..6c61ed4c1de3a7964e79c23fd23af211979e3e5e 100644 (file)
@@ -151,15 +151,26 @@ rxi_GetHostUDPSocket(u_int ahost, u_short port)
 
        len1 = 32766;
        len2 = rx_UdpBufSize;
-       greedy =
-           (setsockopt
-            (socketFd, SOL_SOCKET, SO_RCVBUF, (char *)&len2,
-             sizeof(len2)) >= 0);
-       if (!greedy) {
-           len2 = 32766;       /* fall back to old size... uh-oh! */
-       }
 
-       greedy =
+        /* find the size closest to rx_UdpBufSize that will be accepted */
+        while (!greedy && len2 > len1) {
+            greedy =
+                (setsockopt
+                  (socketFd, SOL_SOCKET, SO_RCVBUF, (char *)&len2,
+                   sizeof(len2)) >= 0);
+            if (!greedy)
+                len2 /= 2;
+        }
+
+        /* but do not let it get smaller than 32K */ 
+        if (len2 < len1)
+            len2 = len1;
+
+        if (len1 < len2)
+            len1 = len2;
+
+
+        greedy =
            (setsockopt
             (socketFd, SOL_SOCKET, SO_SNDBUF, (char *)&len1,
              sizeof(len1)) >= 0)