diff options
author | Jeremy Allison <jra@samba.org> | 2004-11-19 19:32:31 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 10:53:23 -0500 |
commit | a68172ce7cc6c3c9cb02c1b07add9ad1c9c50bbe (patch) | |
tree | e511ff86b065116ad32d12ba7a4fd14692dba6fa /source3/wrepld/server.c | |
parent | 7c93bdcdf8334d4f2140405a982ea02943c5553c (diff) | |
download | samba-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/server.c')
-rw-r--r-- | source3/wrepld/server.c | 10 |
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); } } |