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