diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/configreader.cpp | 3 | ||||
-rw-r--r-- | src/inspircd.cpp | 11 | ||||
-rw-r--r-- | src/socket.cpp | 8 |
3 files changed, 16 insertions, 6 deletions
diff --git a/src/configreader.cpp b/src/configreader.cpp index a14658a7a..9e0a6d8b0 100644 --- a/src/configreader.cpp +++ b/src/configreader.cpp @@ -771,7 +771,8 @@ void ServerConfig::Read(bool bail, userrec* user) */ if (!bail) { - ServerInstance->stats->BoundPortCount = ServerInstance->BindPorts(false); + int found_ports; + ServerInstance->stats->BoundPortCount = ServerInstance->BindPorts(false, found_ports); if (!removed_modules.empty()) for (std::vector<std::string>::iterator removing = removed_modules.begin(); removing != removed_modules.end(); removing++) diff --git a/src/inspircd.cpp b/src/inspircd.cpp index 7f261f079..dc4986755 100644 --- a/src/inspircd.cpp +++ b/src/inspircd.cpp @@ -182,6 +182,8 @@ std::string InspIRCd::GetRevision() InspIRCd::InspIRCd(int argc, char** argv) : ModCount(-1), duration_m(60), duration_h(60*60), duration_d(60*60*24), duration_w(60*60*24*7), duration_y(60*60*24*365) { + int found_ports = 0; + modules.resize(255); factory.resize(255); @@ -257,7 +259,7 @@ InspIRCd::InspIRCd(int argc, char** argv) this->AddServerName(Config->ServerName); CheckDie(); InitializeDisabledCommands(Config->DisabledCommands, this); - stats->BoundPortCount = BindPorts(true); + stats->BoundPortCount = BindPorts(true, found_ports); for(int t = 0; t < 255; t++) Config->global_implementation[t] = 0; @@ -288,11 +290,16 @@ InspIRCd::InspIRCd(int argc, char** argv) /* Just in case no modules were loaded - fix for bug #101 */ this->BuildISupport(); - if (!stats->BoundPortCount) + if ((stats->BoundPortCount == 0) && (found_ports > 0)) { printf("\nERROR: I couldn't bind any ports! Are you sure you didn't start InspIRCd twice?\n"); Exit(ERROR); } + + if (stats->BoundPortCount != (unsigned int)found_ports) + { + printf("\nWARNING: Not all your ports could be bound -- starting anyway with %ld of %d ports bound.\n", stats->BoundPortCount, found_ports); + } /* Add the listening sockets used for client inbound connections * to the socket engine diff --git a/src/socket.cpp b/src/socket.cpp index 225b27733..1e0762321 100644 --- a/src/socket.cpp +++ b/src/socket.cpp @@ -389,19 +389,21 @@ bool InspIRCd::HasPort(int port, char* addr) } /* XXX: Probably belongs in class InspIRCd */ -int InspIRCd::BindPorts(bool bail) +int InspIRCd::BindPorts(bool bail, int &ports_found) { char configToken[MAXBUF], Addr[MAXBUF], Type[MAXBUF]; insp_sockaddr client, server; int clientportcount = 0; int BoundPortCount = 0; + ports_found = 0; + if (!bail) { int InitialPortCount = stats->BoundPortCount; this->Log(DEBUG,"Initial port count: %d",InitialPortCount); - for (int count = 0; count < Config->ConfValueEnum(Config->config_data, "bind"); count++) + for (int count = 0; count < Config->ConfValueEnum(Config->config_data, "bind"); count++, ports_found++) { Config->ConfValue(Config->config_data, "bind", "port", count, configToken, MAXBUF); Config->ConfValue(Config->config_data, "bind", "address", count, Addr, MAXBUF); @@ -460,7 +462,7 @@ int InspIRCd::BindPorts(bool bail) return InitialPortCount; } - for (int count = 0; count < Config->ConfValueEnum(Config->config_data, "bind"); count++) + for (int count = 0; count < Config->ConfValueEnum(Config->config_data, "bind"); count++, ports_found++) { Config->ConfValue(Config->config_data, "bind", "port", count, configToken, MAXBUF); Config->ConfValue(Config->config_data, "bind", "address", count, Addr, MAXBUF); |