]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/inspircd_io.cpp
Replacement of bzero with memset for solaris 10 compat.
[user/henk/code/inspircd.git] / src / inspircd_io.cpp
index 00842b697d0d6f098857f18d7d9c7b39bd6b07d1..62d1453613c8fdbeb1e424782eeed52534cc2079 100644 (file)
@@ -14,6 +14,8 @@
  * ---------------------------------------------------
  */
 
+using namespace std;
+
 #include <sys/time.h>
 #include <sys/resource.h>
 #include <sys/types.h>
 #include "inspircd_io.h"
 #include "inspircd_util.h"
 #include "inspstring.h"
-
-using namespace std;
+#include "helperfuncs.h"
 
 extern FILE *log_file;
 extern int boundPortCount;
 extern int openSockfd[MAXSOCKS];
 extern time_t TIME;
 extern bool unlimitcore;
+extern int MaxConn;
 
 void WriteOpers(char* text, ...);
 
@@ -42,13 +44,6 @@ void Exit (int status)
        if (log_file)
                fclose(log_file);
        send_error("Server shutdown.");
-
-       // close down all listening sockets
-       for (int count = 0; count < boundPortCount; count++)
-       {
-               shutdown(openSockfd[count], 2);
-       }
-
        exit (status);
 }
 
@@ -57,11 +52,6 @@ void Killed(int status)
        if (log_file)
                fclose(log_file);
        send_error("Server terminated.");
-        // close down all listening sockets
-       for (int count = 0; count < boundPortCount; count++)
-       {
-               shutdown(openSockfd[count], 2);
-       }
        exit(status);
 }
 
@@ -75,12 +65,12 @@ void Rehash(int status)
 
 void Start (void)
 {
-       printf("\033[1mInspire Internet Relay Chat Server, compiled " __DATE__ " at " __TIME__ "\n");
-       printf("(C) ChatSpike Development team.\033[0;37m\n\n");
-       printf("Developers:\033[1m     Brain, FrostyCoolSlug\n");
-       printf("Documentation:\033[1m  FrostyCoolSlug, w00t\n");
-       printf("Testers:\033[1m        typobox43, piggles, Lord_Zathras, CC\n");
-       printf("Name concept:\033[1m   Lord_Zathras\n\n");
+       printf("\033[1;32mInspire Internet Relay Chat Server, compiled %s at %s\n",__DATE__,__TIME__);
+       printf("(C) ChatSpike Development team.\033[0m\n\n");
+       printf("Developers:\033[1;32m     Brain, FrostyCoolSlug\033[0m\n");
+       printf("Documentation:\033[1;32m  FrostyCoolSlug, w00t\033[0m\n");
+       printf("Testers:\033[1;32m        typobox43, piggles, Lord_Zathras, CC\033[0m\n");
+       printf("Name concept:\033[1;32m   Lord_Zathras\033[0m\n\n");
 }
 
 void WritePID(std::string filename)
@@ -99,33 +89,26 @@ void WritePID(std::string filename)
        }
 }
 
-void DeadPipe(int status)
-{
-  signal (SIGPIPE, DeadPipe);
-}
 
 int DaemonSeed (void)
 {
        int childpid;
        signal (SIGALRM, SIG_IGN);
        signal (SIGHUP, Rehash);
-       signal (SIGPIPE, DeadPipe);
+       signal (SIGPIPE, SIG_IGN);
        signal (SIGTERM, Exit);
-       signal (SIGABRT, Exit);
        signal (SIGSEGV, Error);
-       signal (SIGURG, Exit);
-       signal (SIGKILL, Exit);
        if ((childpid = fork ()) < 0)
                return (ERROR);
        else if (childpid > 0)
                exit (0);
        setsid ();
        umask (007);
-       /* close stdin, stdout, stderr */
+       printf("InspIRCd Process ID: \033[1;32m%lu\033[0m\n",(unsigned long)getpid());
        freopen("/dev/null","w",stdout);
        freopen("/dev/null","w",stderr);
        
-       setpriority(PRIO_PROCESS,(int)getpid(),15); /* ircd sets to low process priority so it doesnt hog the box */
+       setpriority(PRIO_PROCESS,(int)getpid(),15);
 
        if (unlimitcore)
        {
@@ -351,8 +334,7 @@ int EnumConf(std::stringstream *config, const char* tag)
 {
        int ptr = 0;
        char buffer[MAXBUF], c_tag[MAXBUF], c, lastc;
-       int in_token, in_quotes, tptr, j, idx = 0;
-       char* key;
+       int in_token, in_quotes, tptr, idx = 0;
 
        const char* buf = config->str().c_str();
        long bptr = 0;
@@ -422,8 +404,7 @@ int EnumValues(std::stringstream *config, const char* tag, int index)
 {
        int ptr = 0;
        char buffer[MAXBUF], c_tag[MAXBUF], c, lastc;
-       int in_token, in_quotes, tptr, j, idx = 0;
-       char* key;
+       int in_token, in_quotes, tptr, idx = 0;
        
        bool correct_tag = false;
        int num_items = 0;
@@ -526,7 +507,7 @@ int ReadConf(std::stringstream *config, const char* tag, const char* var, int in
 
        const char* buf = config->str().c_str();
        long bptr = 0;
-       long len = strlen(buf);
+       long len = config->str().length();
        
        ptr = 0;
        in_token = 0;
@@ -638,7 +619,7 @@ int ConfValue(char* tag, char* var, int index, char *result,std::stringstream *c
 // 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)
 {
-       bzero((char *)&server,sizeof(server));
+       memset((char *)&server,0,sizeof(server));
        struct in_addr addy;
        inet_aton(addr,&addy);
        server.sin_family = AF_INET;
@@ -657,7 +638,7 @@ int BindSocket (int sockfd, struct sockaddr_in client, struct sockaddr_in server
        }
        else
        {
-               listen(sockfd,5);
+               listen(sockfd, MaxConn);
                return(TRUE);
        }
 }
@@ -667,7 +648,7 @@ int BindSocket (int sockfd, struct sockaddr_in client, struct sockaddr_in server
 int OpenTCPSocket (void)
 {
        int sockfd;
-       int on = 0;
+       int on = 1;
        struct linger linger = { 0 };
   
        if ((sockfd = socket (AF_INET, SOCK_STREAM, 0)) < 0)
@@ -677,7 +658,7 @@ int OpenTCPSocket (void)
                setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (const char*)&on, sizeof(on));
                /* This is BSD compatible, setting l_onoff to 0 is *NOT* http://web.irc.org/mla/ircd-dev/msg02259.html */
                linger.l_onoff = 1;
-               linger.l_linger = 0;
+               linger.l_linger = 1;
                setsockopt(sockfd, SOL_SOCKET, SO_LINGER, (const char*)&linger,sizeof(linger));
                return (sockfd);
        }