summaryrefslogtreecommitdiffstats
path: root/rpc_demo/msg_main.c
blob: 58b0f7ede194917a6e44c7460c283de4e6bfa0bf (plain) (blame)
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/*
 * This server runs on the RTEMS target or on the host machine.
 *
 *	W. Eric Norum
 *	eric@cls.usask.ca
 */

#include "msg.h"
#include <stdio.h>
#include <stdlib.h>
#include <rpc/pmap_clnt.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>

#include "msg_server.h"

int
main (int argc, char **argv)
{
	int sock;
	struct sockaddr_in myAddr;
	SVCXPRT *transp;

	/*
	 * Create socket
	 */
	sock = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP);
	if (sock < 0) {
		perror ("socket creation problem");
		return 1;
	}

	/*
	 * Bind to local address
	 */
	myAddr.sin_family = htons (AF_INET);
	myAddr.sin_port = htons (TCP_PORT);
	myAddr.sin_addr.s_addr = htonl (INADDR_ANY);
	if (bind (sock, (struct sockaddr *)&myAddr, sizeof myAddr) < 0) {
		perror ("bind problem");
		return 2;
	}

	/*
	 * Create TCP server
	 */
	transp = svctcp_create(sock, 0, 0);
	if (transp == NULL) {
		fprintf (stderr, "cannot create tcp service.");
		return 1;
	}
	if (!svc_register(transp, MESSAGEPROC, MESSAGEVERS, messageproc_1, 0)) {
		fprintf (stderr, "unable to register (MESSAGEPROC, MESSAGEVERS, tcp).\n");
		return 3;
	}

	/*
	 * Run server
	 */
	svc_run ();
	fprintf (stderr, "svc_run returned");
	return 0;
}