ReactOS
0.4.16-dev-340-g0540c21
svc_run.c
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2009, Sun Microsystems, Inc.
3
* All rights reserved.
4
*
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions are met:
7
* - Redistributions of source code must retain the above copyright notice,
8
* this list of conditions and the following disclaimer.
9
* - Redistributions in binary form must reproduce the above copyright notice,
10
* this list of conditions and the following disclaimer in the documentation
11
* and/or other materials provided with the distribution.
12
* - Neither the name of Sun Microsystems, Inc. nor the names of its
13
* contributors may be used to endorse or promote products derived
14
* from this software without specific prior written permission.
15
*
16
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
20
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26
* POSSIBILITY OF SUCH DAMAGE.
27
*/
28
29
/*
30
* This is the rpc server side idle loop
31
* Wait for input, call server program.
32
*/
33
#include <
wintirpc.h
>
34
//#include <pthread.h>
35
#include <
reentrant.h
>
36
//#include <err.h>
37
#include <errno.h>
38
#include <
rpc/rpc.h
>
39
#include <stdio.h>
40
#include <string.h>
41
//#include <unistd.h>
42
43
#include <
rpc/rpc.h
>
44
#include "
rpc_com.h
"
45
//#include <sys/select.h>
46
47
void
48
svc_run
()
49
{
50
fd_set
readfds, cleanfds;
51
struct
timeval
timeout
;
52
extern
rwlock_t
svc_fd_lock
;
53
54
55
for
(;;) {
56
rwlock_rdlock
(&
svc_fd_lock
);
57
readfds =
svc_fdset
;
58
cleanfds =
svc_fdset
;
59
rwlock_unlock
(&
svc_fd_lock
);
60
timeout
.tv_sec = 30;
61
timeout
.tv_usec = 0;
62
switch
(
select
(
svc_maxfd
+1, &readfds,
NULL
,
NULL
, &
timeout
)) {
63
case
SOCKET_ERROR
:
64
FD_ZERO
(&readfds);
65
if
(
WSAGetLastError
() ==
WSAEINTR
) {
66
continue
;
67
}
68
// XXX warn("svc_run: - select failed");
69
return
;
70
case
0:
71
__svc_clean_idle
(&cleanfds, 30,
FALSE
);
72
continue
;
73
default
:
74
svc_getreqset
(&readfds);
75
}
76
}
77
}
78
79
/*
80
* This function causes svc_run() to exit by telling it that it has no
81
* more work to do.
82
*/
83
void
84
svc_exit
()
85
{
86
extern
rwlock_t
svc_fd_lock
;
87
88
rwlock_wrlock
(&
svc_fd_lock
);
89
FD_ZERO
(&
svc_fdset
);
90
rwlock_unlock
(&
svc_fd_lock
);
91
}
rpc.h
NULL
#define NULL
Definition:
types.h:112
FALSE
#define FALSE
Definition:
types.h:117
select
INT WSAAPI select(IN INT s, IN OUT LPFD_SET readfds, IN OUT LPFD_SET writefds, IN OUT LPFD_SET exceptfds, IN CONST struct timeval *timeout)
Definition:
select.c:41
svc_fd_lock
rwlock_t svc_fd_lock
Definition:
mt_misc.c:22
reentrant.h
rwlock_wrlock
#define rwlock_wrlock(l)
Definition:
reentrant.h:140
rwlock_rdlock
#define rwlock_rdlock(l)
Definition:
reentrant.h:139
rwlock_unlock
#define rwlock_unlock(l)
Definition:
reentrant.h:142
svc_maxfd
int svc_maxfd
Definition:
rpc_commondata.c:39
svc_fdset
fd_set svc_fdset
Definition:
rpc_commondata.c:38
__svc_clean_idle
bool_t __svc_clean_idle(fd_set *, int, bool_t)
Definition:
svc_vc.c:820
fd_set
Definition:
winsock.h:66
rwlock_t
Definition:
linux.h:832
timeout
Definition:
dhcpd.h:245
timeval
Definition:
linux.h:1737
svc_getreqset
void svc_getreqset(fd_set *readfds)
Definition:
svc.c:615
svc_exit
void svc_exit()
Definition:
svc_run.c:84
svc_run
void svc_run()
Definition:
svc_run.c:48
rpc_com.h
WSAEINTR
#define WSAEINTR
Definition:
winerror.h:1942
WSAGetLastError
int PASCAL FAR WSAGetLastError(void)
Definition:
dllmain.c:112
FD_ZERO
#define FD_ZERO(set)
Definition:
winsock.h:96
SOCKET_ERROR
#define SOCKET_ERROR
Definition:
winsock.h:333
wintirpc.h
dll
3rdparty
libtirpc
src
svc_run.c
Generated on Sat Dec 14 2024 06:02:37 for ReactOS by
1.9.6