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