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