From 2732f1ee8cf7590c53fd52abc9be0c4ee6a4a3c2 Mon Sep 17 00:00:00 2001 From: sc Date: Thu, 18 Feb 1999 17:33:32 +0000 Subject: Port registration is now based on bus number. This allows to have one server per bus. --- src/ivyecho.c | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) (limited to 'src/ivyecho.c') diff --git a/src/ivyecho.c b/src/ivyecho.c index 468a908..e2ed076 100644 --- a/src/ivyecho.c +++ b/src/ivyecho.c @@ -44,7 +44,7 @@ Usage (const char* progname) { /* Get in touch with super-server and retrieve server's port number */ int -GetPort (long addr) +GetPort (long addr, int key) { struct servent *serv; u_short serv_port; @@ -79,8 +79,12 @@ GetPort (long addr) sin.sin_port = serv_port; sin.sin_addr.s_addr = addr; - /* build request */ - msg.msg_uid = getuid (); + /* build request */ +#if 0 + msg.msg_key = getuid (); +#else + msg.msg_key = key; +#endif msg.msg_port = 0; msg.msg_type = MSG_CLIENT; @@ -107,7 +111,7 @@ failed: } int -ServerOpen (const char *host) +ServerOpen (const char *host, int key) { int sock; static struct sockaddr_in addr; @@ -137,7 +141,7 @@ ServerOpen (const char *host) /* build address from host addr, asking port number to super-server */ memcpy (&addr.sin_addr, hp->h_addr, hp->h_length); addr.sin_family = AF_INET; - addr.sin_port = GetPort (addr.sin_addr.s_addr); + addr.sin_port = GetPort (addr.sin_addr.s_addr, key); if (! addr.sin_port) return 0; @@ -255,9 +259,17 @@ bufferfull: /* now we have a full buffer */ } -/* - * Demande un numero de port au super-serveur de la machine addr - */ +int +ExtractPort (const char* bus) +{ + int res = 2010; + const char* p; + if (bus && (p = index (bus, ':'))) { + res = atoi (p+1); + } + return res; +} + int @@ -265,6 +277,7 @@ main (int argc, char** argv) { char busbuf [128]; const char* bus = 0; + int busport; char serverhostbuf [128]; const char* serverhost = 0; const struct option options [] = { @@ -298,9 +311,10 @@ main (int argc, char** argv) } } + busport = ExtractPort (bus); /* Se connecter au serveur. */ - servfd = ServerOpen (serverhost); + servfd = ServerOpen (serverhost, busport); if (!servfd) { fprintf (stderr, "No server.\n"); return 0; -- cgit v1.1