-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.c
48 lines (40 loc) · 820 Bytes
/
server.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <door.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <signal.h>
static void
server(void *cookie, char *argp, size_t arg_size,
door_desc_t *desc, uint_t ndesc)
{
int data = 123456789;
door_return((char *)&data, sizeof(int), NULL, 0);
}
int
main(int argc, const char **argv)
{
int fd;
struct stat statbuf;
sigset_t sigset;
if (stat(DOOR_FILE, &statbuf) == -1) {
fd = creat(DOOR_FILE, 0444);
if (fd == -1) {
perror("creat");
return EXIT_FAILURE;
}
} else {
(void) fdetach(DOOR_FILE);
}
fd = door_create(server, NULL, 0);
if (fd == -1) {
perror("door_create");
return EXIT_FAILURE;
}
if (fattach(fd, DOOR_FILE) == -1) {
perror("fattach");
return EXIT_FAILURE;
}
sigemptyset(&sigset);
sigaddset(&sigset, SIGTERM);
sigwait(&sigset);
return EXIT_SUCCESS;
}