Man page for igen.
[dyninst.git] / igen / tests / server_xdr.C
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include "xdr_link.SRVR.h"
4 #include <util/h/list.h>
5 #include <signal.h>
6
7 xdr_link *client = 0;
8 List<xdr_link*> client_list;
9 int well_known_socket;
10 void sig_int (int signo);
11
12 void sig_int (int signo)
13 {
14   xdr_link *temp;
15
16   client_list.setCurrent();
17   for (temp = client_list.getCurrent();
18        temp;
19        temp = client_list.next())  
20     {
21       delete (temp);
22     }
23   exit(0);
24 }
25
26 main(int argc, char *argv[])
27 {
28   xdr_link *tp;
29   xdr_link *temp = 0;
30   char **arg_list= 0;
31   int i, fd, eid, ret, sfd;
32
33   if (signal(SIGINT, sig_int) == SIG_ERR)
34     {
35       perror ("Error setting up signals\n");
36       exit(-1);
37     }
38
39   // create the well known socket, requests will be listened for here
40   if ((well_known_socket = RPC_setup_socket (&sfd, AF_INET, SOCK_STREAM)) < 0)
41     {
42       perror ("socket creation\n");
43       exit (-1);
44     }
45   arg_list = RPC_make_arg_list ("xdrc_pvm", AF_INET, SOCK_STREAM, well_known_socket, 1);
46   
47   // start the first 'paradynd'
48   fd = RPCprocessCreate (&eid, "localhost", "", "xdrc_pvm", arg_list);
49   if (fd < 0)
50     {
51       perror ("process create");
52       exit (-1);
53     }
54
55   i = 0;
56   while (arg_list[i])
57     {
58       free (arg_list[i]);
59       i++;
60     }
61   delete (arg_list);
62
63   tp = new xdr_link (fd, NULL, NULL);
64   client_list.add(tp, (void *) tp);
65
66   // now go into main loop
67   while (1)
68     {
69       // check for client connection requests
70       if (RPC_readReady (sfd))
71         {
72           int fd;
73           fd = RPC_getConnect (sfd);
74           client = new xdr_link(fd, NULL, NULL);
75           client_list.add(client, (void *) client);
76         }
77
78       client_list.setCurrent();
79       for (temp = client_list.getCurrent();
80            temp;
81            temp = client_list.next())
82         {
83
84           ret = temp->readReady();
85           switch (ret)
86             {
87             case -1:            // client has terminated
88               // temp->closeConnect();
89               client_list.remove( (void *) temp);
90               break;
91             case 0:            // nothing there
92               break;
93             default:           // something there
94               if (temp->mainLoop() == -1)
95                 {
96                   // temp->closeConnect();
97                   client_list.remove( (void *) temp);
98                 }
99             }
100         }
101     }
102 }
103
104 void
105 xdr_link::connected(String msg)
106 {
107   char msg_out[100];
108
109   sprintf(msg_out, "%s::%s\n", "in xdr_link::connected   ", msg);
110   printf (msg_out);
111   return;
112 }
113
114
115
116
117