diff options
Diffstat (limited to 'src/network/network.cpp')
-rw-r--r-- | src/network/network.cpp | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/src/network/network.cpp b/src/network/network.cpp index 59a5cf55f..3965d8ef7 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -55,6 +55,7 @@ ClientID _redirect_console_to_client; bool _network_need_advertise; uint32 _network_last_advertise_frame; uint8 _network_reconnect; +StringList _network_bind_list; StringList _network_host_list; StringList _network_ban_list; uint32 _frame_counter_server; // The frame_counter of the server, if in network-mode @@ -542,9 +543,12 @@ static bool NetworkListen() { assert(_listensockets.Length() == 0); - NetworkAddress address(_settings_client.network.server_bind_ip, _settings_client.network.server_port); + NetworkAddressList addresses; + GetBindAddresses(&addresses, _settings_client.network.server_port); - address.Listen(SOCK_STREAM, &_listensockets); + for (NetworkAddress *address = addresses.Begin(); address != addresses.End(); address++) { + address->Listen(SOCK_STREAM, &_listensockets); + } if (_listensockets.Length() == 0) { ServerStartError("Could not create listening socket"); @@ -664,6 +668,23 @@ void NetworkAddServer(const char *b) } } +/** + * Get the addresses to bind to. + * @param addresses the list to write to. + * @param port the port to bind to. + */ +void GetBindAddresses(NetworkAddressList *addresses, uint16 port) +{ + for (char **iter = _network_bind_list.Begin(); iter != _network_bind_list.End(); iter++) { + *addresses->Append() = NetworkAddress(*iter, port); + } + + /* No address, so bind to everything. */ + if (addresses->Length() == 0) { + *addresses->Append() = NetworkAddress("", port); + } +} + /* Generates the list of manually added hosts from NetworkGameList and * dumps them into the array _network_host_list. This array is needed * by the function that generates the config file. */ |