summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2006-11-04 13:20:42 +0000
committerbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2006-11-04 13:20:42 +0000
commit026c55cafc2c8e33f4119cec3dbdd04ecdc897cd (patch)
treebc9aa0185fcb74adcf59153b830612ab170f5555
parente53d30bc6d4c3b002f08569b68affa540104d5cf (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.h3
-rw-r--r--src/configreader.cpp3
-rw-r--r--src/inspircd.cpp11
-rw-r--r--src/socket.cpp8
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);