OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [uClibc/] [libc/] [inet/] [rpc/] [svc_run.c] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1325 phoenix
/*
2
 * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
3
 * unrestricted use provided that this legend is included on all tape
4
 * media and as a part of the software program in whole or part.  Users
5
 * may copy or modify Sun RPC without charge, but are not authorized
6
 * to license or distribute it to anyone else except as part of a product or
7
 * program developed by the user.
8
 *
9
 * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
10
 * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
11
 * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
12
 *
13
 * Sun RPC is provided with no support and without any obligation on the
14
 * part of Sun Microsystems, Inc. to assist in its use, correction,
15
 * modification or enhancement.
16
 *
17
 * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
18
 * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
19
 * OR ANY PART THEREOF.
20
 *
21
 * In no event will Sun Microsystems, Inc. be liable for any lost revenue
22
 * or profits or other special, indirect and consequential damages, even if
23
 * Sun has been advised of the possibility of such damages.
24
 *
25
 * Sun Microsystems, Inc.
26
 * 2550 Garcia Avenue
27
 * Mountain View, California  94043
28
 */
29
/*
30
 * This is the rpc server side idle loop
31
 * Wait for input, call server program.
32
 */
33
 
34
#define __FORCE_GLIBC
35
#define _GNU_SOURCE
36
#include <features.h>
37
 
38
#include <errno.h>
39
#include <unistd.h>
40
#include <sys/poll.h>
41
#include <rpc/rpc.h>
42
 
43
/* This function can be used as a signal handler to terminate the
44
   server loop.  */
45
void
46
svc_exit (void)
47
{
48
  free (svc_pollfd);
49
  svc_pollfd = NULL;
50
  svc_max_pollfd = 0;
51
}
52
 
53
void
54
svc_run (void)
55
{
56
  int i;
57
 
58
  for (;;)
59
    {
60
      struct pollfd *my_pollfd;
61
 
62
      if (svc_max_pollfd == 0 && svc_pollfd == NULL)
63
        return;
64
 
65
      my_pollfd = malloc (sizeof (struct pollfd) * svc_max_pollfd);
66
      for (i = 0; i < svc_max_pollfd; ++i)
67
        {
68
          my_pollfd[i].fd = svc_pollfd[i].fd;
69
          my_pollfd[i].events = svc_pollfd[i].events;
70
          my_pollfd[i].revents = 0;
71
        }
72
 
73
      switch (i = poll (my_pollfd, svc_max_pollfd, -1))
74
        {
75
        case -1:
76
          free (my_pollfd);
77
          if (errno == EINTR)
78
            continue;
79
          perror (_("svc_run: - poll failed"));
80
          return;
81
        case 0:
82
          free (my_pollfd);
83
          continue;
84
        default:
85
          svc_getreq_poll (my_pollfd, i);
86
          free (my_pollfd);
87
        }
88
    }
89
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.