From 9a948cf6ed0dc62383a6de6e04f9d1db8529c812 Mon Sep 17 00:00:00 2001 From: Reiner Herrmann Date: Wed, 26 Jan 2011 18:39:46 +0100 Subject: server can now also listen on specified address (e.g. localhost) --- src/game.c | 7 +++++-- src/main.c | 18 +++++++++--------- src/net/server.c | 4 ++-- src/net/server.h | 2 +- 4 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/game.c b/src/game.c index 9087832..6798f64 100644 --- a/src/game.c +++ b/src/game.c @@ -92,7 +92,7 @@ static void main_loop_server(socket_list_t* client_socks) void start_game(const bool servermode, const char* addr, const char* port, const uint8_t num_players) { - assert(addr != NULL && port != NULL); + assert(port != NULL); // addr can be NULL for server -> listen on every address bool server_process = false; @@ -112,7 +112,7 @@ void start_game(const bool servermode, const char* addr, const char* port, const data_store_t *data = data_store(); - server_sock = server_start(port); + server_sock = server_start(addr, port); server_get_players(server_sock, &client_socks, num_players); data->player_list.count = num_players; @@ -139,6 +139,9 @@ void start_game(const bool servermode, const char* addr, const char* port, const sleep(1); // TODO make sure server process is listening + if(addr == NULL) + addr = "localhost"; + sock = client_connect_server(addr, port); data_store_t *data = data_store(); diff --git a/src/main.c b/src/main.c index 71beb56..dda53ac 100644 --- a/src/main.c +++ b/src/main.c @@ -8,9 +8,10 @@ static void print_usage(const char* name) { - const char* usage = "Usage: %s [-u nickname] [-s server] [-n num_players] -p port\n" - "\tserver\t\thostname/address of server; only required on client\n" - "\tnum_players\tnumber of players; optional on server (default: 2)\n"; + const char* usage = "Usage: %s [-u nickname] [-s address] [-n num_players] [-l] -p port\n" + "\t-s address\t\thostname/address to connect to (client) or listen on (server)\n" + "\t-n num_players\t\tnumber of players; only on server (default: 2)\n" + "\t-l\t\t\tstart server\n"; fprintf(stderr, usage, name); exit(EXIT_FAILURE); } @@ -21,10 +22,10 @@ int main(int argc, char *argv[]) uint8_t num_players = 2; char* port = NULL; char* addr = NULL; - bool servermode = true; + bool servermode = false; data_store_t *ds = data_store(); - const char* accepted = "u:s:p:n:h"; + const char* accepted = "u:s:p:n:hl"; while((opt = getopt(argc, argv, accepted)) != -1) { switch(opt) @@ -38,11 +39,13 @@ int main(int argc, char *argv[]) break; case 's': // hostname addr = optarg; - servermode = false; break; case 'n': // number of users num_players = atoi(optarg); break; + case 'l': + servermode = true; + break; case 'h': // help default: print_usage(argv[0]); @@ -53,9 +56,6 @@ int main(int argc, char *argv[]) if(port == NULL) print_usage(argv[0]); - if(servermode) - addr = "localhost"; - if(strlen(ds->nickname) == 0) { const char* env_nick = getenv("USER"); diff --git a/src/net/server.c b/src/net/server.c index c40b0ac..4c8aeb7 100644 --- a/src/net/server.c +++ b/src/net/server.c @@ -29,7 +29,7 @@ int socket_for_player_id(const socket_list_t *client_socks, const player_id_t pi * @param[in] port Port on which server should listen * @return Listening socket */ -int server_start(const char* port) +int server_start(const char* addr, const char* port) { assert(port != NULL); @@ -43,7 +43,7 @@ int server_start(const char* port) hints.ai_flags = AI_PASSIVE; // wildcard IP hints.ai_protocol = 0; // any protocol - status = getaddrinfo(NULL, port, &hints, &result); + status = getaddrinfo(addr, port, &hints, &result); if(status != 0) { printf("getaddrinfo: %s\n", gai_strerror(status)); diff --git a/src/net/server.h b/src/net/server.h index fb1d30b..b5c0524 100644 --- a/src/net/server.h +++ b/src/net/server.h @@ -16,7 +16,7 @@ typedef struct } socket_list_t; int socket_for_player_id(const socket_list_t *client_socks, const player_id_t pid); -int server_start(const char* port); +int server_start(const char* addr, const char* port); void server_get_players(int serversock, socket_list_t* client_socks, const uint8_t count); void server_prep_hello(msg_t *m, const player_list_entry_t* player); -- cgit v1.2.3