]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
r3817: Fix from Lars Müller <lmuelle@suse.de> for bug #2050, calculate
authorJeremy Allison <jra@samba.org>
Wed, 17 Nov 2004 19:52:26 +0000 (19:52 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 15:53:19 +0000 (10:53 -0500)
max_fd for select correctly.
Jeremy.

source/smbd/server.c

index e40d1f8bc7fb753b967d2b3934adf0e875eeac71..5f2713bb836c4ca0b0c7b4a18fc751df8d17437b 100644 (file)
@@ -186,6 +186,7 @@ static BOOL open_sockets_smbd(BOOL is_daemon, BOOL interactive, const char *smb_
        int fd_listenset[FD_SETSIZE];
        fd_set listen_set;
        int s;
+       int max_fd = 0;
        int i;
        char *ports;
 
@@ -241,11 +242,16 @@ static BOOL open_sockets_smbd(BOOL is_daemon, BOOL interactive, const char *smb_
 
                        for (ptr=ports; next_token(&ptr, tok, NULL, sizeof(tok)); ) {
                                unsigned port = atoi(tok);
-                               if (port == 0) continue;
+                               if (port == 0) {
+                                       continue;
+                               }
                                s = fd_listenset[num_sockets] = open_socket_in(SOCK_STREAM, port, 0, ifip->s_addr, True);
                                if(s == -1)
                                        return False;
 
+                               if (max_fd < s)
+                                       max_fd = s;
+
                                /* ready to listen */
                                set_socket_options(s,"SO_KEEPALIVE"); 
                                set_socket_options(s,user_socket_options);
@@ -335,7 +341,7 @@ static BOOL open_sockets_smbd(BOOL is_daemon, BOOL interactive, const char *smb_
                memcpy((char *)&lfds, (char *)&listen_set, 
                       sizeof(listen_set));
                
-               num = sys_select(FD_SETSIZE,&lfds,NULL,NULL,NULL);
+               num = sys_select(max_fd+1,&lfds,NULL,NULL,NULL);
                
                if (num == -1 && errno == EINTR) {
                        if (got_sig_term) {