svc_run.c revision 26250
1145332Smarcel/*
2145332Smarcel * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
3145332Smarcel * unrestricted use provided that this legend is included on all tape
4145332Smarcel * media and as a part of the software program in whole or part.  Users
5145332Smarcel * may copy or modify Sun RPC without charge, but are not authorized
6145332Smarcel * to license or distribute it to anyone else except as part of a product or
7145332Smarcel * program developed by the user.
8145332Smarcel *
9145332Smarcel * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
10147191Sjkoshy * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
11147191Sjkoshy * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
12147191Sjkoshy *
13147191Sjkoshy * Sun RPC is provided with no support and without any obligation on the
14147191Sjkoshy * part of Sun Microsystems, Inc. to assist in its use, correction,
15147191Sjkoshy * modification or enhancement.
16147191Sjkoshy *
17147191Sjkoshy * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
18147191Sjkoshy * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
19147191Sjkoshy * OR ANY PART THEREOF.
20147191Sjkoshy *
21147191Sjkoshy * In no event will Sun Microsystems, Inc. be liable for any lost revenue
22174405Sjkoshy * or profits or other special, indirect and consequential damages, even if
23174405Sjkoshy * Sun has been advised of the possibility of such damages.
24174405Sjkoshy *
25174405Sjkoshy * Sun Microsystems, Inc.
26147191Sjkoshy * 2550 Garcia Avenue
27147191Sjkoshy * Mountain View, California  94043
28145332Smarcel */
29
30#if defined(LIBC_SCCS) && !defined(lint)
31/*static char *sccsid = "from: @(#)svc_run.c 1.1 87/10/13 Copyr 1984 Sun Micro";*/
32/*static char *sccsid = "from: @(#)svc_run.c	2.1 88/07/29 4.0 RPCSRC";*/
33static char *rcsid = "$Id: svc_run.c,v 1.7 1997/02/22 15:01:32 peter Exp $";
34#endif
35
36/*
37 * This is the rpc server side idle loop
38 * Wait for input, call server program.
39 */
40#include <rpc/rpc.h>
41#include <stdio.h>
42#include <sys/errno.h>
43#include <sys/types.h>
44#include <sys/time.h>
45#include <unistd.h>
46#include <stdlib.h>
47#include <string.h>
48
49extern int __svc_fdsetsize;
50extern fd_set *__svc_fdset;
51
52void
53svc_run()
54{
55	fd_set *fds;
56
57	for (;;) {
58		if (__svc_fdset) {
59			int bytes = howmany(__svc_fdsetsize, NFDBITS) *
60				sizeof(fd_mask);
61			fds = (fd_set *)malloc(bytes);
62			memcpy(fds, __svc_fdset, bytes);
63		} else
64			fds = NULL;
65		switch (select(svc_maxfd + 1, fds, NULL, NULL,
66				(struct timeval *)0)) {
67		case -1:
68			if (errno == EINTR) {
69				if (fds)
70					free(fds);
71				continue;
72			}
73			perror("svc_run: - select failed");
74			if (fds)
75				free(fds);
76			return;
77		case 0:
78			if (fds)
79				free(fds);
80			continue;
81		default:
82			/* if fds == NULL, select() can't return a result */
83			svc_getreqset2(fds, svc_maxfd + 1);
84			free(fds);
85		}
86	}
87}
88