summaryrefslogtreecommitdiffstats
path: root/hunt
diff options
context:
space:
mode:
authordholland <dholland@NetBSD.org>2014-03-30 00:26:58 +0000
committerdholland <dholland@NetBSD.org>2014-03-30 00:26:58 +0000
commita91067b8ba82b43d07c7888f04b5d641a509561c (patch)
tree9347b897bfb8c62636431997f8d6b6fd4ed04dd6 /hunt
parente53e70033dc782eccd9e460365fc696efb234a8d (diff)
downloadbsdgames-darwin-a91067b8ba82b43d07c7888f04b5d641a509561c.tar.gz
bsdgames-darwin-a91067b8ba82b43d07c7888f04b5d641a509561c.tar.zst
bsdgames-darwin-a91067b8ba82b43d07c7888f04b5d641a509561c.zip
Clean up the names of the various pieces of socket apparatus.
Systematic naming is easier to follow...
Diffstat (limited to 'hunt')
-rw-r--r--hunt/huntd/answer.c6
-rw-r--r--hunt/huntd/driver.c188
-rw-r--r--hunt/huntd/extern.c5
-rw-r--r--hunt/huntd/hunt.h5
4 files changed, 129 insertions, 75 deletions
diff --git a/hunt/huntd/answer.c b/hunt/huntd/answer.c
index 1df0855b..8b4c789d 100644
--- a/hunt/huntd/answer.c
+++ b/hunt/huntd/answer.c
@@ -1,4 +1,4 @@
-/* $NetBSD: answer.c,v 1.19 2014/03/29 23:44:38 dholland Exp $ */
+/* $NetBSD: answer.c,v 1.20 2014/03/30 00:26:58 dholland Exp $ */
/*
* Copyright (c) 1983-2003, Regents of the University of California.
* All rights reserved.
@@ -32,7 +32,7 @@
#include <sys/cdefs.h>
#ifndef lint
-__RCSID("$NetBSD: answer.c,v 1.19 2014/03/29 23:44:38 dholland Exp $");
+__RCSID("$NetBSD: answer.c,v 1.20 2014/03/30 00:26:58 dholland Exp $");
#endif /* not lint */
#include <sys/types.h>
@@ -76,7 +76,7 @@ answer(void)
socklen = sizeof sockstruct - 1;
#endif
errno = 0;
- newsock = accept(Socket, (struct sockaddr *) &sockstruct, &socklen);
+ newsock = accept(huntsock, (struct sockaddr *) &sockstruct, &socklen);
if (newsock < 0)
{
if (errno == EINTR)
diff --git a/hunt/huntd/driver.c b/hunt/huntd/driver.c
index e3fd2842..dce7c4b1 100644
--- a/hunt/huntd/driver.c
+++ b/hunt/huntd/driver.c
@@ -1,4 +1,4 @@
-/* $NetBSD: driver.c,v 1.33 2014/03/29 23:44:38 dholland Exp $ */
+/* $NetBSD: driver.c,v 1.34 2014/03/30 00:26:58 dholland Exp $ */
/*
* Copyright (c) 1983-2003, Regents of the University of California.
* All rights reserved.
@@ -32,7 +32,7 @@
#include <sys/cdefs.h>
#ifndef lint
-__RCSID("$NetBSD: driver.c,v 1.33 2014/03/29 23:44:38 dholland Exp $");
+__RCSID("$NetBSD: driver.c,v 1.34 2014/03/30 00:26:58 dholland Exp $");
#endif /* not lint */
#include <sys/types.h>
@@ -48,32 +48,82 @@ __RCSID("$NetBSD: driver.c,v 1.33 2014/03/29 23:44:38 dholland Exp $");
#include "hunt.h"
#include "pathnames.h"
+/*
+ * There are three listening sockets in this daemon:
+ * - a datagram socket that listens on a well known port
+ * - a stream socket for general player connections
+ * - a second stream socket that prints the stats/scores
+ *
+ * These are (now) named as follows:
+ * - contact (contactsock, contactaddr, etc.)
+ * - hunt (huntsock, huntaddr, etc.)
+ * - stat (statsock, stataddr, etc.)
+ *
+ * Until being cleaned up in 2014 the code used an assortment of
+ * inconsistent and confusing names to refer to the pieces of these:
+ *
+ * test_port -> contactaddr
+ * Test_port -> contactport
+ * Test_socket -> contactsock
+ *
+ * sock_port -> huntport
+ * Socket -> huntsock
+ *
+ * Daemon -> both stataddr and huntaddr
+ * stat_port -> statport
+ * status -> statsock
+ *
+ * It isn't clear to me what purpose contactsocket is supposed to
+ * serve; maybe it was supposed to avoid asking inetd to support
+ * tcp/wait sockets? Anyway, we can't really change the protocol at
+ * this point. (To complicate matters, contactsocket doesn't exist if
+ * using AF_UNIX sockets; you just connect to the game socket.)
+ *
+ * When using internet sockets:
+ * - the contact socket listens on INADDR_ANY using the game port
+ * (either specified or the default: CONTACT_PORT, currently
+ * spelled TEST_PORT)
+ * - the hunt socket listens on INADDR_ANY using whatever port
+ * - the stat socket listens on INADDR_ANY using whatever port
+ *
+ * When using AF_UNIX sockets:
+ * - the contact socket isn't used
+ * - the hunt socket listens on the game socket (either a specified path
+ * or /tmp/hunt)
+ * - the stat socket listens on its own socket (huntsocket's path +
+ * ".stats")
+ */
+
#ifdef INTERNET
-static uint16_t Test_port = TEST_PORT;
+static struct sockaddr_in huntaddr;
+static struct sockaddr_in stataddr;
+static uint16_t contactport = TEST_PORT;
+static uint16_t huntport; /* port # of tcp listen socket */
+static uint16_t statport; /* port # of statistics tcp socket */
+static int contactsock; /* socket to answer datagrams */
+#define STATSOCKADDR_SIZE (sizeof statsockaddr)
#else
-static const char Sock_name[] = PATH_HUNTSOCKET;
-static const char Stat_name[] = PATH_STATSOCKET;
+static struct sockaddr_un huntaddr;
+static struct sockaddr_un stataddr;
+static const char huntsockpath[] = PATH_HUNTSOCKET;
+static const char statsockpath[] = PATH_STATSOCKET;
+#define STATSOCKADDR_SIZE (sizeof statsockaddr - 1)
#endif
-static SOCKET Daemon;
+int huntsock; /* main socket */
+static int statsock; /* stat socket */
+static socklen_t huntaddrlen;
+static socklen_t stataddrlen;
#ifdef INTERNET
-static int Test_socket; /* test socket to answer datagrams */
static bool inetd_spawned; /* invoked via inetd */
static bool standard_port = true; /* true if listening on standard port */
-static u_short sock_port; /* port # of tcp listen socket */
-static u_short stat_port; /* port # of statistics tcp socket */
-#define DAEMON_SIZE (sizeof Daemon)
-#else
-#define DAEMON_SIZE (sizeof Daemon - 1)
#endif
#ifdef VOLCANO
static int volcano = 0; /* Explosion size */
#endif
-static int Status; /* stat socket */
-
static void clear_scores(void);
static bool havechar(PLAYER *, int);
static void init(void);
@@ -109,7 +159,7 @@ main(int ac, char **av)
#ifdef INTERNET
case 'p':
standard_port = false;
- Test_port = atoi(optarg);
+ contactport = atoi(optarg);
break;
#endif
default:
@@ -135,32 +185,32 @@ again:
}
#ifdef INTERNET
if (fdset[2].revents & POLLIN) {
- namelen = DAEMON_SIZE;
- (void) recvfrom(Test_socket, &msg, sizeof msg,
+ namelen = sizeof(test);
+ (void) recvfrom(contactsock, &msg, sizeof msg,
0, (struct sockaddr *) &test, &namelen);
switch (ntohs(msg)) {
case C_MESSAGE:
if (Nplayer <= 0)
break;
reply = htons((u_short) Nplayer);
- (void) sendto(Test_socket, &reply,
+ (void) sendto(contactsock, &reply,
sizeof reply, 0,
- (struct sockaddr *) &test, DAEMON_SIZE);
+ (struct sockaddr *) &test, sizeof(test));
break;
case C_SCORES:
- reply = htons(stat_port);
- (void) sendto(Test_socket, &reply,
+ reply = htons(statport);
+ (void) sendto(contactsock, &reply,
sizeof reply, 0,
- (struct sockaddr *) &test, DAEMON_SIZE);
+ (struct sockaddr *) &test, sizeof(test));
break;
case C_PLAYER:
case C_MONITOR:
if (msg == C_MONITOR && Nplayer <= 0)
break;
- reply = htons(sock_port);
- (void) sendto(Test_socket, &reply,
+ reply = htons(huntport);
+ (void) sendto(contactsock, &reply,
sizeof reply, 0,
- (struct sockaddr *) &test, DAEMON_SIZE);
+ (struct sockaddr *) &test, sizeof(test));
break;
}
}
@@ -249,7 +299,7 @@ init(void)
{
int i;
#ifdef INTERNET
- SOCKET test_port;
+ struct sockaddr_in contactaddr;
int msg;
socklen_t len;
#endif
@@ -277,16 +327,18 @@ init(void)
* Initialize statistics socket
*/
#ifdef INTERNET
- Daemon.sin_family = SOCK_FAMILY;
- Daemon.sin_addr.s_addr = INADDR_ANY;
- Daemon.sin_port = 0;
+ stataddr.sin_family = AF_INET;
+ stataddr.sin_addr.s_addr = INADDR_ANY;
+ stataddr.sin_port = 0;
+ stataddrlen = sizeof(stataddr);
#else
- Daemon.sun_family = SOCK_FAMILY;
- (void) strcpy(Daemon.sun_path, Stat_name);
+ stataddr.sun_family = AF_UNIX;
+ (void) strcpy(stataddr.sun_path, statsockpath);
+ stataddrlen = SUN_LEN(&stataddr);
#endif
- Status = socket(SOCK_FAMILY, SOCK_STREAM, 0);
- if (bind(Status, (struct sockaddr *) &Daemon, DAEMON_SIZE) < 0) {
+ statsock = socket(SOCK_FAMILY, SOCK_STREAM, 0);
+ if (bind(statsock, (struct sockaddr *) &stataddr, stataddrlen) < 0) {
if (errno == EADDRINUSE)
exit(0);
else {
@@ -294,36 +346,38 @@ init(void)
cleanup(1);
}
}
- (void) listen(Status, 5);
+ (void) listen(statsock, 5);
#ifdef INTERNET
- len = sizeof (SOCKET);
- if (getsockname(Status, (struct sockaddr *) &Daemon, &len) < 0) {
+ len = sizeof(stataddr);
+ if (getsockname(statsock, (struct sockaddr *) &stataddr, &len) < 0) {
complain(LOG_ERR, "getsockname");
exit(1);
}
- stat_port = ntohs(Daemon.sin_port);
+ statport = ntohs(stataddr.sin_port);
#endif
/*
* Initialize main socket
*/
#ifdef INTERNET
- Daemon.sin_family = SOCK_FAMILY;
- Daemon.sin_addr.s_addr = INADDR_ANY;
- Daemon.sin_port = 0;
+ huntaddr.sin_family = AF_INET;
+ huntaddr.sin_addr.s_addr = INADDR_ANY;
+ huntaddr.sin_port = 0;
+ huntaddrlen = sizeof(huntaddr);
#else
- Daemon.sun_family = SOCK_FAMILY;
- (void) strcpy(Daemon.sun_path, Sock_name);
+ huntaddr.sun_family = AF_UNIX;
+ (void) strcpy(huntaddr.sun_path, huntsockpath);
+ huntaddrlen = SUN_LEN(&huntaddr);
#endif
- Socket = socket(SOCK_FAMILY, SOCK_STREAM, 0);
+ huntsock = socket(SOCK_FAMILY, SOCK_STREAM, 0);
#if defined(INTERNET)
msg = 1;
- if (setsockopt(Socket, SOL_SOCKET, SO_USELOOPBACK, &msg, sizeof msg)<0)
+ if (setsockopt(huntsock, SOL_SOCKET, SO_USELOOPBACK, &msg, sizeof msg)<0)
complain(LOG_WARNING, "setsockopt loopback");
#endif
- if (bind(Socket, (struct sockaddr *) &Daemon, DAEMON_SIZE) < 0) {
+ if (bind(huntsock, (struct sockaddr *) &huntaddr, huntaddrlen) < 0) {
if (errno == EADDRINUSE)
exit(0);
else {
@@ -331,49 +385,49 @@ init(void)
cleanup(1);
}
}
- (void) listen(Socket, 5);
+ (void) listen(huntsock, 5);
#ifdef INTERNET
- len = sizeof (SOCKET);
- if (getsockname(Socket, (struct sockaddr *) &Daemon, &len) < 0) {
+ len = sizeof(huntaddr);
+ if (getsockname(huntsock, (struct sockaddr *) &huntaddr, &len) < 0) {
complain(LOG_ERR, "getsockname");
exit(1);
}
- sock_port = ntohs(Daemon.sin_port);
+ huntport = ntohs(huntaddr.sin_port);
#endif
/*
* Initialize minimal poll mask
*/
- fdset[0].fd = Socket;
+ fdset[0].fd = huntsock;
fdset[0].events = POLLIN;
- fdset[1].fd = Status;
+ fdset[1].fd = statsock;
fdset[1].events = POLLIN;
#ifdef INTERNET
- len = sizeof (SOCKET);
- if (getsockname(0, (struct sockaddr *) &test_port, &len) >= 0
- && test_port.sin_family == AF_INET) {
+ len = sizeof(contactaddr);
+ if (getsockname(STDIN_FILENO, (struct sockaddr *) &contactaddr, &len) >= 0
+ && contactaddr.sin_family == AF_INET) {
inetd_spawned = true;
- Test_socket = 0;
- if (test_port.sin_port != htons((u_short) Test_port)) {
+ contactsock = STDIN_FILENO;
+ if (ntohs(contactaddr.sin_port) != contactport) {
standard_port = false;
- Test_port = ntohs(test_port.sin_port);
+ contactport = ntohs(contactaddr.sin_port);
}
} else {
- test_port = Daemon;
- test_port.sin_port = htons((u_short) Test_port);
+ contactaddr = huntaddr;
+ contactaddr.sin_port = htons(contactport);
- Test_socket = socket(SOCK_FAMILY, SOCK_DGRAM, 0);
- if (bind(Test_socket, (struct sockaddr *) &test_port,
- DAEMON_SIZE) < 0) {
+ contactsock = socket(AF_INET, SOCK_DGRAM, 0);
+ if (bind(contactsock, (struct sockaddr *) &contactaddr,
+ sizeof(contactaddr)) < 0) {
complain(LOG_ERR, "bind");
exit(1);
}
- (void) listen(Test_socket, 5);
+ (void) listen(contactsock, 5);
}
- fdset[2].fd = Test_socket;
+ fdset[2].fd = contactsock;
fdset[2].events = POLLIN;
#else
fdset[2].fd = -1;
@@ -830,9 +884,9 @@ cleanup(int exitval)
(void) fclose(pp->p_output);
}
#endif
- (void) close(Socket);
+ (void) close(huntsock);
#ifdef AF_UNIX_HACK
- (void) unlink(Sock_name);
+ (void) unlink(huntsockpath);
#endif
exit(exitval);
@@ -859,7 +913,7 @@ send_stats(void)
#else
socklen = sizeof sockstruct - 1;
#endif
- s = accept(Status, (struct sockaddr *) &sockstruct, &socklen);
+ s = accept(statsock, (struct sockaddr *) &sockstruct, &socklen);
if (s < 0) {
if (errno == EINTR)
return;
diff --git a/hunt/huntd/extern.c b/hunt/huntd/extern.c
index 0c14090d..6add16ea 100644
--- a/hunt/huntd/extern.c
+++ b/hunt/huntd/extern.c
@@ -1,4 +1,4 @@
-/* $NetBSD: extern.c,v 1.9 2014/03/29 21:55:59 dholland Exp $ */
+/* $NetBSD: extern.c,v 1.10 2014/03/30 00:26:58 dholland Exp $ */
/*
* Copyright (c) 1983-2003, Regents of the University of California.
* All rights reserved.
@@ -32,7 +32,7 @@
#include <sys/cdefs.h>
#ifndef lint
-__RCSID("$NetBSD: extern.c,v 1.9 2014/03/29 21:55:59 dholland Exp $");
+__RCSID("$NetBSD: extern.c,v 1.10 2014/03/30 00:26:58 dholland Exp $");
#endif /* not lint */
#include "hunt.h"
@@ -47,7 +47,6 @@ char Orig_maze[HEIGHT][WIDTH2]; /* the original maze */
struct pollfd fdset[3+MAXPL+MAXMON];
int Nplayer = 0; /* number of players */
-int Socket; /* main socket */
int See_over[NASCII]; /* lookup table for determining whether
* character represents "transparent"
* item */
diff --git a/hunt/huntd/hunt.h b/hunt/huntd/hunt.h
index b94cdc20..ab2dd56e 100644
--- a/hunt/huntd/hunt.h
+++ b/hunt/huntd/hunt.h
@@ -1,4 +1,4 @@
-/* $NetBSD: hunt.h,v 1.27 2014/03/29 22:29:55 dholland Exp $ */
+/* $NetBSD: hunt.h,v 1.28 2014/03/30 00:26:58 dholland Exp $ */
/*
* Copyright (c) 1983-2003, Regents of the University of California.
@@ -145,7 +145,8 @@ struct regen_def {
extern char Buf[BUFSIZ], Maze[HEIGHT][WIDTH2], Orig_maze[HEIGHT][WIDTH2];
-extern int Nplayer, Socket;
+extern int Nplayer;
+extern int huntsock;
extern struct pollfd fdset[];
extern int See_over[NASCII];