summaryrefslogtreecommitdiff
path: root/source3/wrepld
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2004-11-19 19:32:31 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 10:53:23 -0500
commita68172ce7cc6c3c9cb02c1b07add9ad1c9c50bbe (patch)
treee511ff86b065116ad32d12ba7a4fd14692dba6fa /source3/wrepld
parent7c93bdcdf8334d4f2140405a982ea02943c5553c (diff)
downloadsamba-a68172ce7cc6c3c9cb02c1b07add9ad1c9c50bbe.tar.gz
samba-a68172ce7cc6c3c9cb02c1b07add9ad1c9c50bbe.tar.bz2
samba-a68172ce7cc6c3c9cb02c1b07add9ad1c9c50bbe.zip
r3877: Final (I hope :-) fix for #2050 from Lars Müller for select maxfd's.
Jeremy. (This used to be commit 65fc39fc388244923d1e36076b5a4116aa434be5)
Diffstat (limited to 'source3/wrepld')
-rw-r--r--source3/wrepld/server.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/source3/wrepld/server.c b/source3/wrepld/server.c
index d78e0b206f..9d035a6cbf 100644
--- a/source3/wrepld/server.c
+++ b/source3/wrepld/server.c
@@ -164,7 +164,7 @@ void exit_server(const char *reason)
plus the broadcast sockets.
***************************************************************************/
-static BOOL create_listen_fdset(void)
+static BOOL create_listen_fdset( int *maxfd)
{
int i;
int num_interfaces = iface_count();
@@ -221,6 +221,7 @@ static BOOL create_listen_fdset(void)
}
add_fd_to_sock_array(s);
FD_SET(s, listen_set);
+ *maxfd = MAX( *maxfd, s);
}
} else {
/* Just bind to 0.0.0.0 - accept connections from anywhere. */
@@ -243,6 +244,7 @@ static BOOL create_listen_fdset(void)
add_fd_to_sock_array(s);
FD_SET(s, listen_set);
+ *maxfd = MAX( *maxfd, s);
}
return True;
@@ -346,10 +348,11 @@ static BOOL listen_for_wins_packets(void)
int num_interfaces = iface_count();
fd_set fds;
int i, num, s, new_s;
+ static int maxfd = 0;
struct timeval timeout;
if(listen_set == NULL) {
- if(!create_listen_fdset()) {
+ if(!create_listen_fdset( &maxfd)) {
DEBUG(0,("listen_for_packets: Fatal error. unable to create listen set. Exiting.\n"));
return True;
}
@@ -364,7 +367,7 @@ static BOOL listen_for_wins_packets(void)
BlockSignals(False, SIGTERM);
- num = sys_select(FD_SETSIZE, &fds, NULL, NULL, &timeout);
+ num = sys_select(maxfd+1, &fds, NULL, NULL, &timeout);
/* We can only take signals when we are in the select - block them again here. */
@@ -397,6 +400,7 @@ static BOOL listen_for_wins_packets(void)
set_socket_options(new_s, user_socket_options);
FD_SET(new_s, listen_set);
add_fd_to_sock_array(new_s);
+ maxfd = MAX( maxfd, new_s);
}
}