X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Finspircd_io.cpp;h=fcbb83aaeb18a57cbc495f68cfda81a436b5f471;hb=d5fed3976bba0f1082522da9b79b6b1cc93d4c56;hp=fca22e3bed64095133987734b038d2382de77fa8;hpb=5c328da92fbf7a7e8b26ded2df085d3cf49f67f5;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/inspircd_io.cpp b/src/inspircd_io.cpp index fca22e3be..fcbb83aae 100644 --- a/src/inspircd_io.cpp +++ b/src/inspircd_io.cpp @@ -26,6 +26,7 @@ #include "inspircd_io.h" #include "inspircd_util.h" #include "inspstring.h" +#include "helperfuncs.h" using namespace std; @@ -33,6 +34,7 @@ extern FILE *log_file; extern int boundPortCount; extern int openSockfd[MAXSOCKS]; extern time_t TIME; +extern bool unlimitcore; void WriteOpers(char* text, ...); @@ -41,13 +43,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); } @@ -56,11 +51,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); } @@ -74,12 +64,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) @@ -98,45 +88,41 @@ 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); - rlimit rl; - if (getrlimit(RLIMIT_CORE, &rl) == -1) - { - log(DEFAULT,"Failed to getrlimit()!"); - return(FALSE); - } - else + if (unlimitcore) { - rl.rlim_cur = rl.rlim_max; - if (setrlimit(RLIMIT_CORE, &rl) == -1) - log(DEFAULT,"setrlimit() failed, cannot increase coredump size."); + rlimit rl; + if (getrlimit(RLIMIT_CORE, &rl) == -1) + { + log(DEFAULT,"Failed to getrlimit()!"); + return(FALSE); + } + else + { + rl.rlim_cur = rl.rlim_max; + if (setrlimit(RLIMIT_CORE, &rl) == -1) + log(DEFAULT,"setrlimit() failed, cannot increase coredump size."); + } } return (TRUE); @@ -347,8 +333,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; @@ -418,8 +403,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; @@ -522,7 +506,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; @@ -663,7 +647,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) @@ -673,7 +657,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); }