diff options
Diffstat (limited to 'nfsd/main.c')
-rw-r--r-- | nfsd/main.c | 34 |
1 files changed, 23 insertions, 11 deletions
diff --git a/nfsd/main.c b/nfsd/main.c index 69099361..ee071090 100644 --- a/nfsd/main.c +++ b/nfsd/main.c @@ -1,5 +1,5 @@ /* Main NFS server program - Copyright (C) 1996 Free Software Foundation, Inc. + Copyright (C) 1996, 2002 Free Software Foundation, Inc. Written by Michael I. Bushnell, p/BSG. This file is part of the GNU Hurd. @@ -23,16 +23,20 @@ #include <unistd.h> #include <rpc/pmap_prot.h> #include <maptime.h> +#include <hurd.h> +#include <error.h> int main_udp_socket, pmap_udp_socket; struct sockaddr_in main_address, pmap_address; -char *index_file_name; +static char index_file[] = LOCALSTATEDIR "/state/misc/nfsd.index"; +char *index_file_name = index_file; int main (int argc, char **argv) { int nthreads; - + int fail; + if (argc > 2) { fprintf (stderr, "%s [num-threads]\n", argv[0]); @@ -44,9 +48,8 @@ main (int argc, char **argv) nthreads = atoi (argv[1]); if (!nthreads) nthreads = 4; - - index_file_name = asprintf ("%s/state/misc/nfsd.index", LOCALSTATEDIR); + authserver = getauth (); maptime_map (0, 0, &mapped_time); main_address.sin_family = AF_INET; @@ -58,16 +61,25 @@ main (int argc, char **argv) main_udp_socket = socket (PF_INET, SOCK_DGRAM, 0); pmap_udp_socket = socket (PF_INET, SOCK_DGRAM, 0); - bind (main_udp_socket, (struct sockaddr *)&main_address, - sizeof (struct sockaddr_in)); - bind (pmap_udp_socket, (struct sockaddr *)&pmap_address, - sizeof (struct sockaddr_in)); + fail = bind (main_udp_socket, (struct sockaddr *)&main_address, + sizeof (struct sockaddr_in)); + if (fail) + error (1, errno, "Binding NFS socket"); + + fail = bind (pmap_udp_socket, (struct sockaddr *)&pmap_address, + sizeof (struct sockaddr_in)); + if (fail) + error (1, errno, "Binding PMAP socket"); init_filesystems (); + cthread_detach (cthread_fork ((cthread_fn_t) server_loop, + (any_t)(intptr_t) pmap_udp_socket)); + while (nthreads--) - cthread_detach (cthread_fork ((cthread_fn_t) server_loop, 0)); - + cthread_detach (cthread_fork ((cthread_fn_t) server_loop, + (any_t)(intptr_t) main_udp_socket)); + for (;;) { sleep (1); |