]> git.pond.sub.org Git - empserver/commitdiff
(listen_addr): New econfig key.
authorMarkus Armbruster <armbru@pond.sub.org>
Fri, 23 Sep 2005 18:41:24 +0000 (18:41 +0000)
committerMarkus Armbruster <armbru@pond.sub.org>
Fri, 23 Sep 2005 18:41:24 +0000 (18:41 +0000)
(player_init): Implement it.

(player_init): Support service name in econfig key loginport.  Service
empire no longer takes precedence over econfig.  Closes #797096.

include/econfig-spec.h
src/lib/global/path.c
src/lib/player/accept.c

index 4c3fdd849358d6b00de43c9421009d6d6a4371f3..5d8548f3153a8000345672711604856a433fa724 100644 (file)
@@ -58,6 +58,8 @@ EMPCFBOTH("data", datadir, char *, NSC_STRING, KM_INTERNAL,
     "Directory the data is stored in")
 EMPCFBOTH("info", infodir, char *, NSC_STRING, KM_INTERNAL,
     "Directory the info pages are stored in")
+EMPCFBOTH("listen_addr", listen_addr, char *, NSC_STRING, KM_INTERNAL,
+         "Local address the server should listen on.  \"\" listens on all.")
 EMPCFBOTH("port", loginport, char *, NSC_STRING, KM_INTERNAL,
     "TCP/IP port the server will start up on")
 EMPCFBOTH("privname", privname, char *, NSC_STRING, 0,
index c18d7e12abfa1016e6a6595b8e08ed764aff358e..d15c169b99892e6e79b58bfe64aeae83b709db08 100644 (file)
@@ -50,4 +50,5 @@ char *banfil  = "ban";
 char *authfil  = "auth";
 char *timestampfil = "timestamp";
 
+char *listen_addr = "";
 char *loginport = EMP_PORT;
index 288dcb3b09923ba44f9b53a13cd2e881028e2136..b3d8c9d79fe6c4e9c0f36d27142f6c7b3b359931 100644 (file)
@@ -71,22 +71,37 @@ void
 player_init(void)
 {
     struct sockaddr_in sin;
+    struct hostent *hp;
     struct servent *sp;
     int s;
-    short port;
     int val;
 
     emp_initque(&Players);
     init_player_commands();
 
-    sp = getservbyname("empire", "tcp");
-    if (sp == 0)
-       port = htons(atoi(loginport));
-    else
-       port = sp->s_port;
-    sin.sin_addr.s_addr = INADDR_ANY;
-    sin.sin_port = port;
     sin.sin_family = AF_INET;
+    if (!*listen_addr)
+       sin.sin_addr.s_addr = INADDR_ANY;
+    else if (isdigit(*listen_addr))
+       sin.sin_addr.s_addr = inet_addr(listen_addr);
+    else {
+       hp = gethostbyname(listen_addr);
+       if (!hp) {
+           logerror("Can't resolve listen address %s", listen_addr);
+           exit(1);
+       }
+       memcpy(&sin.sin_addr, hp->h_addr, sizeof(sin.sin_addr));
+    }
+    if (isdigit(*loginport))
+       sin.sin_port = htons(atoi(loginport));
+    else {
+       sp = getservbyname(loginport, "tcp");
+       if (!sp) {
+           logerror("Can't resolve service %s", loginport);
+           exit(1);
+       }
+       sin.sin_port = sp->s_port;
+    }
     if ((s = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
        logerror("inet socket create");
        exit(1);