diff options
author | Jeremy Allison <jra@samba.org> | 2004-11-17 19:52:26 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 10:53:19 -0500 |
commit | eb0b1f757d814e01980cd9c5fc4918791ce1e54d (patch) | |
tree | c86d008d5e83d624c004094de1313ff26e7504e7 /source | |
parent | 1aa1c2f489f5b92c3696e7b9123061d91babc34e (diff) | |
download | samba-eb0b1f757d814e01980cd9c5fc4918791ce1e54d.tar.gz samba-eb0b1f757d814e01980cd9c5fc4918791ce1e54d.tar.xz samba-eb0b1f757d814e01980cd9c5fc4918791ce1e54d.zip |
r3817: Fix from Lars Müller <lmuelle@suse.de> for bug #2050, calculate
max_fd for select correctly.
Jeremy.
Diffstat (limited to 'source')
-rw-r--r-- | source/smbd/server.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/source/smbd/server.c b/source/smbd/server.c index e40d1f8bc7f..5f2713bb836 100644 --- a/source/smbd/server.c +++ b/source/smbd/server.c @@ -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) { |