]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
add backlog parameter for the listen() API
authorAlan T. DeKok <aland@freeradius.org>
Mon, 1 Sep 2025 22:55:58 +0000 (18:55 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Mon, 1 Sep 2025 22:55:58 +0000 (18:55 -0400)
src/lib/bio/fd.c
src/lib/bio/fd.h
src/lib/bio/fd_config.c

index 5dabcca8387414b8993bc3fcc08d0072042e30a2..8f71ec0a036d4a5ad133e44a66df9c99bf2280ba 100644 (file)
@@ -919,10 +919,7 @@ int fr_bio_fd_init_listen(fr_bio_fd_t *my)
        my->bio.read = fr_bio_null_read;
        my->bio.write = fr_bio_null_write;
 
-       /*
-        *      @todo - make the backlog configurable.
-        */
-       if (listen(my->info.socket.fd, 8) < 0) {
+       if (listen(my->info.socket.fd, my->info.cfg->backlog_is_set ? my->info.cfg->backlog : 8) < 0) {
                fr_strerror_printf("Failed calling listen() %s", fr_syserror(errno));
                return fr_bio_error(IO);
        }
index 64d256f6bca5742196ee15956d061f66f14fc920..60e32201ce37cb8c49b3715489be8b517d85ac54 100644 (file)
@@ -96,6 +96,8 @@ typedef struct {
 
        char const      *interface;     //!< for binding to an interface
 
+       uint32_t        backlog;        //!< for listen()
+
        uint32_t        recv_buff;      //!< How big the kernel's receive buffer should be.
        uint32_t        send_buff;      //!< How big the kernel's send buffer should be.
 
@@ -117,6 +119,7 @@ typedef struct {
         */
        bool            recv_buff_is_set;       //!< Whether we were provided with a recv_buf
        bool            send_buff_is_set;       //!< Whether we were provided with a send_buf
+       bool            backlog_is_set;         //!< Whether we were provided with a backlog
 } fr_bio_fd_config_t;
 
 extern const conf_parser_t fr_bio_fd_client_config[];
index 97b2dc1011490b8f42839aa914d8aacf0b61074d..c259ac7f69eb7bf7f21b62262a6481b794abade7 100644 (file)
@@ -319,6 +319,8 @@ static const conf_parser_t server_tcp_sub_config[] = {
 
        { FR_CONF_OFFSET("interface", fr_bio_fd_config_t, interface) },
 
+       { FR_CONF_OFFSET_IS_SET("backlog", FR_TYPE_UINT32, 0, fr_bio_fd_config_t, backlog) },
+
        { FR_CONF_OFFSET_IS_SET("recv_buff", FR_TYPE_UINT32, 0, fr_bio_fd_config_t, recv_buff) },
        { FR_CONF_OFFSET_IS_SET("send_buff", FR_TYPE_UINT32, 0, fr_bio_fd_config_t, send_buff) },