tUnix socket renamed from /tmp/.dopewars/socket-%u to /tmp/.dopewars-%u/socket, so that multiple servers run by different users can coexist at different port numbers; also improved the error checking for the socket creation code - 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 50ac6d5fc46f3b16b311778590c1ec52e8c09436
 (DIR) parent abe583e0a854064d289b0a6c85a37251ae73cf60
 (HTM) Author: Ben Webb <ben@salilab.org>
       Date:   Tue, 19 Feb 2002 12:55:23 +0000
       
       Unix socket renamed from /tmp/.dopewars/socket-%u to /tmp/.dopewars-%u/socket,
       so that multiple servers run by different users can coexist at different
       port numbers; also improved the error checking for the socket creation code
       
       
       Diffstat:
         M src/serverside.c                    |      24 ++++++++++++++++++------
       
       1 file changed, 18 insertions(+), 6 deletions(-)
       ---
 (DIR) diff --git a/src/serverside.c b/src/serverside.c
       t@@ -1001,30 +1001,38 @@ void RemovePlayerFromServer(Player *Play)
        }
        
        #ifndef CYGWIN
       -static gchar sockdir[] = "/tmp/.dopewars/";
       +static gchar sockpref[] = "/tmp/.dopewars";
       +
       +static gchar *GetLocalSockDir(void)
       +{
       +  return g_strdup_printf("%s-%u", sockpref, Port);
       +}
       +
        gchar *GetLocalSocket(void)
        {
       -  return g_strdup_printf("%ssocket-%u", sockdir, Port);
       +  return g_strdup_printf("%s-%u/socket", sockpref, Port);
        }
        
        static void CloseLocalSocket(int localsock)
        {
       -  gchar *sockname;
       +  gchar *sockname, *sockdir;
        
          if (localsock >= 0)
            close(localsock);
        
          sockname = GetLocalSocket();
       +  sockdir = GetLocalSockDir();
          unlink(sockname);
          rmdir(sockdir);
          g_free(sockname);
       +  g_free(sockdir);
        }
        
        static int SetupLocalSocket(void)
        {
          int sock;
          struct sockaddr_un addr;
       -  gchar *sockname;
       +  gchar *sockname, *sockdir;
        
          CloseLocalSocket(-1);
        
       t@@ -1035,16 +1043,20 @@ static int SetupLocalSocket(void)
          SetBlocking(sock, FALSE);
        
          sockname = GetLocalSocket();
       -  mkdir(sockdir, S_IRUSR | S_IWUSR | S_IXUSR);
       +  sockdir = GetLocalSockDir();
       +  if (mkdir(sockdir, S_IRUSR | S_IWUSR | S_IXUSR) == -1)
       +    return -1;
        
          addr.sun_family = AF_UNIX;
          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));
       +  if (bind(sock, (struct sockaddr *)&addr, sizeof(struct sockaddr_un)) == -1)
       +    return -1;
        
          chmod(sockname, S_IRUSR | S_IWUSR);
          g_free(sockname);
       +  g_free(sockdir);
        
          listen(sock, 10);