diff options
author | sc | 1999-02-18 17:33:32 +0000 |
---|---|---|
committer | sc | 1999-02-18 17:33:32 +0000 |
commit | 2732f1ee8cf7590c53fd52abc9be0c4ee6a4a3c2 (patch) | |
tree | 024a4d9385680a6985fc7a57b99abeee9f645f7f /src/ivyd.c | |
parent | 3dfd47dde8bb049a797f5dc653105c1cb57af617 (diff) | |
download | ivyd-2732f1ee8cf7590c53fd52abc9be0c4ee6a4a3c2.zip ivyd-2732f1ee8cf7590c53fd52abc9be0c4ee6a4a3c2.tar.gz ivyd-2732f1ee8cf7590c53fd52abc9be0c4ee6a4a3c2.tar.bz2 ivyd-2732f1ee8cf7590c53fd52abc9be0c4ee6a4a3c2.tar.xz |
Port registration is now based on bus number.
This allows to have one server per bus.
Diffstat (limited to 'src/ivyd.c')
-rw-r--r-- | src/ivyd.c | 49 |
1 files changed, 29 insertions, 20 deletions
@@ -37,7 +37,6 @@ const char* const servicename = "ivyd"; const char* const port_env_variable = "INIVYD_PORT"; const int default_port = DEFAULT_INIVYD_PORT; -static char * HomeDir; int debug = 0; static void @@ -54,7 +53,7 @@ Usage (const char* progname) * Envoie un numero de port au super-serveur de la machine locale */ int -SendPort (int port) +SendPort (int key, int port) { struct servent *serv; u_short serv_port; @@ -81,7 +80,11 @@ SendPort (int port) sin.sin_port = serv_port; sin.sin_addr.s_addr = LOCALHOST; - msg.msg_uid = getuid (); +#if 0 + msg.msg_key = getuid (); +#else + msg.msg_key = key; +#endif msg.msg_port = port; msg.msg_type = MSG_SERVER; @@ -104,7 +107,7 @@ failed: int -InitSocket () +InitSocket (int key) { int s, i; struct sockaddr_in addr; @@ -134,7 +137,7 @@ InitSocket () if (debug) printf ("Ivyd listens on port %d\n", ntohs (addr.sin_port)); - if (! SendPort (addr.sin_port)) { + if (! SendPort (key, addr.sin_port)) { fprintf (stderr, "No Ivyd port server. Continuing with port = %d\n", ntohs (addr.sin_port)); } @@ -173,7 +176,8 @@ HandleRequests (void* ch, int fd, void* data) struct sockaddr_in addr; int len = sizeof (addr); - fprintf (stderr, "REQUEST on %d\n", fd); + if (debug) + fprintf (stderr, "REQUEST on %d\n", fd); /* retrieve request */ while (n > 0) { @@ -202,7 +206,8 @@ HandleRequests (void* ch, int fd, void* data) ans.ok = 1; write ( #endif - fprintf (stderr, "REQUEST [%s]\n", req.buffer); + if (debug) + fprintf (stderr, "REQUEST [%s]\n", req.buffer); IvySendMsg (req.buffer); } @@ -212,16 +217,28 @@ HandleConnections (void* ch, int fd, void* data) static struct sockaddr sa; static int acc; int newfd = accept (fd, &sa, &acc); - fprintf (stderr, "CONNECTION %d\n", newfd); + if (debug) + fprintf (stderr, "CONNECTION %d\n", newfd); IvyChannelSetUp (newfd, 0, 0, HandleRequests); } +int +ExtractPort (const char* bus) +{ + int res = DEFAULT_BUS; + const char* p; + if (bus && (p = index (bus, ':'))) { + res = atoi (p+1); + } + return res; +} void main (int argc, char **argv) { int sock; char busbuf [128]; + int busport; const char* bus = 0; int c; @@ -245,22 +262,14 @@ main (int argc, char **argv) if (fork ()) exit (0); + /* determine port in bus address */ + busport = ExtractPort (bus); + /* create server port */ - sock = InitSocket (); + sock = InitSocket (busport); signal (SIGTERM, exit); /* pour flinguer le serveur */ -#if 0 - /* - * Charger le fichier de personnalisation. - */ - HomeDir = getenv ("HOME"); - - if (!HomeDir || !*HomeDir) - fprintf (stderr, "%s: No HOME environment variable.\n", argv0); - else - StartUp (HomeDir); -#endif /* Ivy initialization and main loop */ IvyInit ("IVYD", 0, 0, 0, 0, 0); |