-
Notifications
You must be signed in to change notification settings - Fork 3
/
server.c
49 lines (41 loc) · 1.14 KB
/
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
49
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <servers/bootstrap.h>
#include <bootstrap_priv.h>
#include "message.h"
kern_return_t start_server(void) {
mach_port_t server_port = MACH_PORT_NULL;
kern_return_t ret = 0;
message_receive_t *message = NULL;
unsigned long size = 0;
ret = bootstrap_check_in(bootstrap_port, (char *)server_name, &server_port);
CHECKBAD(ret, bad);
message = malloc(sizeof(message_receive_t));
while (true) {
puts("Listening...");
size = sizeof(message_receive_t);
bzero(message, sizeof(message_receive_t));
message->hdr.msgh_size = size;
ret = mach_msg((mach_msg_header_t *)message, MACH_RCV_MSG, 0, size, server_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL);
if (ret) {
mach_error("mach_msg", ret);
continue;
}
printf("Got message: %s\n", message->data);
if (strcmp(message->data, "zimm_bye") == 0)
break;
}
mach_port_deallocate(mach_task_self(), server_port);
bad:
return ret;
}
#ifndef MACH_SERVER_LIB
int main() {
kern_return_t ret = start_server();
if (ret) {
mach_error("start_server", ret);
}
return ret;
}
#endif