diff options
-rw-r--r-- | include/inspircd.h | 4 | ||||
-rw-r--r-- | include/inspircd_io.h | 12 | ||||
-rw-r--r-- | src/inspircd_io.cpp | 35 | ||||
-rw-r--r-- | src/socket.cpp | 2 |
4 files changed, 29 insertions, 24 deletions
diff --git a/include/inspircd.h b/include/inspircd.h index 89764f1c4..822be147e 100644 --- a/include/inspircd.h +++ b/include/inspircd.h @@ -48,11 +48,7 @@ #include "command_parse.h" // some misc defines - #define ERROR -1 -#define TRUE 1 -#define FALSE 0 -#define MAXSOCKS 64 #define MAXCOMMAND 32 // crucial defines diff --git a/include/inspircd_io.h b/include/inspircd_io.h index e4b5f98a3..a71638915 100644 --- a/include/inspircd_io.h +++ b/include/inspircd_io.h @@ -365,13 +365,13 @@ class ServerConfig : public classbase }; -void Exit (int); -void Start (void); +void Exit(int status); +void Start(); void SetSignals(); -int DaemonSeed (void); -bool FileExists (const char* file); -int OpenTCPSocket (void); -int BindSocket (int sockfd, struct sockaddr_in client, struct sockaddr_in server, int port, char* addr); +bool DaemonSeed(); +bool FileExists(const char* file); +int OpenTCPSocket(); +bool BindSocket(int sockfd, struct sockaddr_in client, struct sockaddr_in server, int port, char* addr); void WritePID(const std::string &filename); int BindPorts(); char* CleanFilename(char* name); diff --git a/src/inspircd_io.cpp b/src/inspircd_io.cpp index f4ab7ce07..9fc1bd410 100644 --- a/src/inspircd_io.cpp +++ b/src/inspircd_io.cpp @@ -795,7 +795,7 @@ void ServerConfig::Read(bool bail, userrec* user) } } -void Exit (int status) +void Exit(int status) { if (Config->log_file) fclose(Config->log_file); @@ -830,7 +830,7 @@ void Rehash(int status) -void Start (void) +void Start() { printf("\033[1;32mInspire Internet Relay Chat Server, compiled %s at %s\n",__DATE__,__TIME__); printf("(C) ChatSpike Development team.\033[0m\n\n"); @@ -865,7 +865,7 @@ void SetSignals() } -int DaemonSeed (void) +bool DaemonSeed() { int childpid; if ((childpid = fork ()) < 0) @@ -886,7 +886,7 @@ int DaemonSeed (void) if (getrlimit(RLIMIT_CORE, &rl) == -1) { log(DEFAULT,"Failed to getrlimit()!"); - return(FALSE); + return false; } else { @@ -896,7 +896,7 @@ int DaemonSeed (void) } } - return (TRUE); + return true; } @@ -1459,8 +1459,14 @@ int ServerConfig::ConfValueInteger(char* tag, char* var, int index, std::strings return atoi(result); } -// This will bind a socket to a port. It works for UDP/TCP -int BindSocket (int sockfd, struct sockaddr_in client, struct sockaddr_in server, int port, char* addr) +/** This will bind a socket to a port. It works for UDP/TCP. + * If a hostname is given to bind to, the function will first + * attempt to resolve the hostname, then bind to the IP the + * hostname resolves to. This is a blocking lookup blocking for + * a maximum of one second before it times out, using the DNS + * server specified in the configuration file. + */ +bool BindSocket (int sockfd, struct sockaddr_in client, struct sockaddr_in server, int port, char* addr) { memset((char *)&server,0,sizeof(server)); struct in_addr addy; @@ -1483,7 +1489,7 @@ int BindSocket (int sockfd, struct sockaddr_in client, struct sockaddr_in server else { log(DEFAULT,"WARNING: Could not resolve '%s' to an IP for binding to on port %d",addr,port); - return(FALSE); + return false; } } server.sin_family = AF_INET; @@ -1501,7 +1507,7 @@ int BindSocket (int sockfd, struct sockaddr_in client, struct sockaddr_in server server.sin_port = htons(port); if (bind(sockfd,(struct sockaddr*)&server,sizeof(server)) < 0) { - return(ERROR); + return false; } else { @@ -1509,25 +1515,28 @@ int BindSocket (int sockfd, struct sockaddr_in client, struct sockaddr_in server if (listen(sockfd, Config->MaxConn) == -1) { log(DEFAULT,"ERROR in listen(): %s",strerror(errno)); - return(FALSE); + return false; } else { - return(TRUE); + return true; } } } // Open a TCP Socket -int OpenTCPSocket (void) +int OpenTCPSocket() { int sockfd; int on = 1; struct linger linger = { 0 }; if ((sockfd = socket (AF_INET, SOCK_STREAM, 0)) < 0) + { + log(DEFAULT,"Error creating TCP socket: %s",strerror(errno)); return (ERROR); + } else { setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (const char*)&on, sizeof(on)); @@ -1580,7 +1589,7 @@ int BindPorts() return(ERROR); } - if (BindSocket(openSockfd[BoundPortCount],client,server,Config->ports[count],Config->addrs[count]) == ERROR) + if (!BindSocket(openSockfd[BoundPortCount],client,server,Config->ports[count],Config->addrs[count])) { log(DEFAULT,"InspIRCd: startup: failed to bind port [%s:%lu]: %s",Config->addrs[count],(unsigned long)Config->ports[count],strerror(errno)); } diff --git a/src/socket.cpp b/src/socket.cpp index 2868375a5..787e656da 100644 --- a/src/socket.cpp +++ b/src/socket.cpp @@ -76,7 +76,7 @@ InspSocket::InspSocket(const std::string &ahost, int aport, bool listening, unsi } else { - if (BindSocket(this->fd,this->client,this->server,aport,(char*)ahost.c_str()) == ERROR) + if (!BindSocket(this->fd,this->client,this->server,aport,(char*)ahost.c_str())) { this->Close(); this->fd = -1; |