tServer and admin client fixed to use port number when accessing the Unix domai… | |
git clone git://src.adamsgaard.dk/vaccinewars | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit dda06a7bedf8d1ba29a949bee21e991fdb10243d | |
parent c77672f5f19dc6838e0f010339fa43dbab051ff3 | |
Author: Ben Webb <[email protected]> | |
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(-) | |
--- | |
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; | |
} | |
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); | |
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 |