(listen_addr): New econfig key.

(player_init): Implement it.

(player_init): Support service name in econfig key loginport.  Service
empire no longer takes precedence over econfig.  Closes #797096.
This commit is contained in:
Markus Armbruster 2005-09-23 18:41:24 +00:00
parent d253e1266f
commit 1580b1f734
3 changed files with 26 additions and 8 deletions

View 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);