diff options
author | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2005-12-14 17:57:12 +0000 |
---|---|---|
committer | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2005-12-14 17:57:12 +0000 |
commit | 6de0aaaef692aa6a30e77cc76cf6e80bbc6e4500 (patch) | |
tree | 40b6fbcf60c75d5307bce5e96335395c6d3c0954 /src/inspircd_io.cpp | |
parent | 417432f2be811573326b8366783020fa1fd63eec (diff) |
Moved BindPorts out of main file into inspircd_io.cpp
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@2430 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src/inspircd_io.cpp')
-rw-r--r-- | src/inspircd_io.cpp | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/inspircd_io.cpp b/src/inspircd_io.cpp index c435de383..631cf397a 100644 --- a/src/inspircd_io.cpp +++ b/src/inspircd_io.cpp @@ -1023,3 +1023,53 @@ int OpenTCPSocket (void) return (sockfd); } } + +int BindPorts() +{ + char configToken[MAXBUF], Addr[MAXBUF], Type[MAXBUF]; + int clientportcount = 0; + for (int count = 0; count < Config->ConfValueEnum("bind",&Config->config_f); count++) + { + Config->ConfValue("bind","port",count,configToken,&Config->config_f); + Config->ConfValue("bind","address",count,Addr,&Config->config_f); + Config->ConfValue("bind","type",count,Type,&Config->config_f); + if (strcmp(Type,"servers")) + { + // modules handle server bind types now, + // its not a typo in the strcmp. + ports[clientportcount] = atoi(configToken); + strlcpy(Config->addrs[clientportcount],Addr,256); + clientportcount++; + log(DEBUG,"InspIRCd: startup: read binding %s:%s [%s] from config",Addr,configToken, Type); + } + } + portCount = clientportcount; + + for (int count = 0; count < portCount; count++) + { + if ((openSockfd[boundPortCount] = OpenTCPSocket()) == ERROR) + { + log(DEBUG,"InspIRCd: startup: bad fd %lu",(unsigned long)openSockfd[boundPortCount]); + return(ERROR); + } + if (BindSocket(openSockfd[boundPortCount],client,server,ports[count],Config->addrs[count]) == ERROR) + { + log(DEFAULT,"InspIRCd: startup: failed to bind port %lu",(unsigned long)ports[count]); + } + else /* well we at least bound to one socket so we'll continue */ + { + boundPortCount++; + } + } + + /* if we didn't bind to anything then abort */ + if (!boundPortCount) + { + log(DEFAULT,"InspIRCd: startup: no ports bound, bailing!"); + printf("\nERROR: Was not able to bind any of %lu ports! Please check your configuration.\n\n", (unsigned long)portCount); + return (ERROR); + } + + return boundPortCount; +} + |