summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/configreader.cpp3
-rw-r--r--src/inspircd.cpp11
-rw-r--r--src/socket.cpp8
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);