]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
only set recv/send_buff socket options if they're set in the config
authorAlan T. DeKok <aland@freeradius.org>
Thu, 17 Aug 2017 14:45:08 +0000 (16:45 +0200)
committerAlan T. DeKok <aland@freeradius.org>
Thu, 17 Aug 2017 15:01:47 +0000 (17:01 +0200)
src/modules/rlm_radius/rlm_radius_udp.c

index 2b32aa2d8117512db90f5e98f104327141232801..50e5fdedaf567775e0943a5f6f4e3c00b0d1e0e8 100644 (file)
@@ -1406,9 +1406,6 @@ static fr_connection_state_t conn_open(UNUSED fr_event_list_t *el, UNUSED int fd
 static fr_connection_state_t conn_init(int *fd_out, void *uctx)
 {
        int fd;
-#if defined (SO_RCVBUF) || defined (SO_SNDBUF)
-       int opt;
-#endif
        rlm_radius_udp_connection_t *c = talloc_get_type_abort(uctx, rlm_radius_udp_connection_t);
        char src_buf[128], dst_buf[128];
 
@@ -1444,16 +1441,24 @@ static fr_connection_state_t conn_init(int *fd_out, void *uctx)
                                  dst_buf, c->dst_port);
 
 #ifdef SO_RCVBUF
-       opt = c->inst->recv_buff;
-       if (setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &opt, sizeof(int)) < 0) {
-               WARN("Failed setting 'recv_buf': %s", fr_syserror(errno));
+       if (c->inst->recv_buff_is_set) {
+               int opt;
+
+               opt = c->inst->recv_buff;
+               if (setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &opt, sizeof(int)) < 0) {
+                       WARN("Failed setting 'recv_buf': %s", fr_syserror(errno));
+               }
        }
 #endif
 
 #ifdef SO_SNDBUF
-       opt = c->inst->send_buff;
-       if (setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &opt, sizeof(int)) < 0) {
-               WARN("Failed setting 'send_buf': %s", fr_syserror(errno));
+       if (c->inst->send_buff_is_set) {
+               int opt;
+
+               opt = c->inst->send_buff;
+               if (setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &opt, sizeof(int)) < 0) {
+                       WARN("Failed setting 'send_buf': %s", fr_syserror(errno));
+               }
        }
 #endif