diff options
author | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2006-11-04 13:20:42 +0000 |
---|---|---|
committer | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2006-11-04 13:20:42 +0000 |
commit | 026c55cafc2c8e33f4119cec3dbdd04ecdc897cd (patch) | |
tree | bc9aa0185fcb74adcf59153b830612ab170f5555 | |
parent | e53d30bc6d4c3b002f08569b68affa540104d5cf (diff) |
As requested by satmd, inspircd will now run with no client ports configured
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@5643 e03df62e-2008-0410-955e-edbf42e46eb7
-rw-r--r-- | include/inspircd.h | 3 | ||||
-rw-r--r-- | src/configreader.cpp | 3 | ||||
-rw-r--r-- | src/inspircd.cpp | 11 | ||||
-rw-r--r-- | src/socket.cpp | 8 |
4 files changed, 18 insertions, 7 deletions
diff --git a/include/inspircd.h b/include/inspircd.h index 1a56978a2..568c6a6a5 100644 --- a/include/inspircd.h +++ b/include/inspircd.h @@ -448,9 +448,10 @@ class InspIRCd : public classbase /** Bind all ports specified in the configuration file. * @param bail True if the function should bail back to the shell on failure + * @param found_ports The actual number of ports found in the config, as opposed to the number actually bound * @return The number of ports actually bound without error */ - int BindPorts(bool bail); + int BindPorts(bool bail, int &found_ports); /** Returns true if this server has the given port bound to the given address * @param port The port number 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); |