tServer and admin client fixed to use port number when accessing the Unix domain socket (to support multiple running servers on different ports) - vaccinewars - be a doctor and try to vaccinate the world
 (HTM) git clone git://src.adamsgaard.dk/vaccinewars
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit dda06a7bedf8d1ba29a949bee21e991fdb10243d
 (DIR) parent c77672f5f19dc6838e0f010339fa43dbab051ff3
 (HTM) Author: Ben Webb <ben@salilab.org>
       Date:   Sun, 11 Nov 2001 19:31:25 +0000
       
       Server and admin client fixed to use port number when accessing the Unix
       domain socket (to support multiple running servers on different ports)
       
       
       Diffstat:
         M src/admin.c                         |       9 +++++++--
         M src/serverside.c                    |      23 ++++++++++++++++++-----
         M src/serverside.h                    |       3 +++
       
       3 files changed, 28 insertions(+), 7 deletions(-)
       ---
 (DIR) diff --git a/src/admin.c b/src/admin.c
       t@@ -31,18 +31,22 @@
        #include <glib.h>
        
        #include "network.h"
       +#include "serverside.h"
        
        static int OpenSocket(void) {
          struct sockaddr_un addr;
          int sock;
       +  gchar *sockname;
       +
       +  sockname=GetLocalSocket();
        
          g_print("Attempting to connect to local dopewars server via. Unix domain\n"
       -          "socket /tmp/.dopewars/socket...\n");
       +          "socket %s...\n",sockname);
          sock = socket(PF_UNIX,SOCK_STREAM,0);
          if (sock==-1) { perror("socket"); exit(1); }
        
          addr.sun_family = AF_UNIX;
       -  strncpy(addr.sun_path,"/tmp/.dopewars/socket",sizeof(addr.sun_path));
       +  strncpy(addr.sun_path,sockname,sizeof(addr.sun_path));
          addr.sun_path[sizeof(addr.sun_path)-1]='\0';
        
          if (connect(sock,(struct sockaddr *)&addr,sizeof(struct sockaddr_un))==-1) {
       t@@ -50,6 +54,7 @@ static int OpenSocket(void) {
          }
        
          g_print("Connection established.\n\n");
       +  g_free(sockname);
        
          return sock;
        }
 (DIR) diff --git a/src/serverside.c b/src/serverside.c
       t@@ -924,15 +924,26 @@ void RemovePlayerFromServer(Player *Play) {
        }
        
        #ifndef CYGWIN
       +static gchar sockdir[] = "/tmp/.dopewars/";
       +gchar *GetLocalSocket(void) {
       +  return g_strdup_printf("%ssocket-%u",sockdir,Port);
       +}
       +
        static void CloseLocalSocket(int localsock) {
       +  gchar *sockname;
       +
          if (localsock>=0) close(localsock);
       -  unlink("/tmp/.dopewars/socket");
       -  rmdir("/tmp/.dopewars");
       +
       +  sockname=GetLocalSocket();
       +  unlink(sockname);
       +  rmdir(sockdir);
       +  g_free(sockname);
        }
        
        static int SetupLocalSocket(void) {
          int sock;
          struct sockaddr_un addr;
       +  gchar *sockname;
        
          CloseLocalSocket(-1);
        
       t@@ -941,15 +952,17 @@ static int SetupLocalSocket(void) {
        
          SetBlocking(sock,FALSE);
        
       -  mkdir("/tmp/.dopewars",S_IRUSR|S_IWUSR|S_IXUSR);
       +  sockname=GetLocalSocket();
       +  mkdir(sockdir,S_IRUSR|S_IWUSR|S_IXUSR);
        
          addr.sun_family = AF_UNIX;
       -  strncpy(addr.sun_path,"/tmp/.dopewars/socket",sizeof(addr.sun_path));
       +  strncpy(addr.sun_path,sockname,sizeof(addr.sun_path));
          addr.sun_path[sizeof(addr.sun_path)-1]='\0';
        
          bind(sock,(struct sockaddr *)&addr,sizeof(struct sockaddr_un));
        
       -  chmod("/tmp/.dopewars/socket",S_IRUSR|S_IWUSR);
       +  chmod(sockname,S_IRUSR|S_IWUSR);
       +  g_free(sockname);
        
          listen(sock,10);
          
 (DIR) diff --git a/src/serverside.h b/src/serverside.h
       t@@ -71,5 +71,8 @@ Player *GetNextShooter(Player *Play);
        #ifdef GUI_SERVER
        void GuiServerLoop(gboolean is_service);
        #endif
       +#ifndef CYGWIN
       +gchar *GetLocalSocket(void);
       +#endif
        
        #endif