X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Finspircd_io.cpp;h=fcbb83aaeb18a57cbc495f68cfda81a436b5f471;hb=d5fed3976bba0f1082522da9b79b6b1cc93d4c56;hp=4cb245d9a0ca7baf556a944b3cc90d2fc5f12627;hpb=5cce62f7d799f073ea6ca1793328c08c2df7c3ff;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/inspircd_io.cpp b/src/inspircd_io.cpp index 4cb245d9a..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[1;37mInspire Internet Relay Chat Server, compiled " __DATE__ " at " __TIME__ "\n"); - printf("(C) ChatSpike Development team.\033[0;37m\n\n"); - printf("\033[1;37mDevelopers:\033[0;37m Brain, FrostyCoolSlug\n"); - printf("\033[1;37mDocumentation:\033[0;37m FrostyCoolSlug, w00t\n"); - printf("\033[1;37mTesters:\033[0;37m typobox43, piggles, Lord_Zathras, CC\n"); - printf("\033[1;37mName concept:\033[0;37m 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,34 +88,42 @@ 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 stdout, stdin, stderr */ - close(0); - close(1); - close(2); + 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); - setpriority(PRIO_PROCESS,(int)getpid(),15); /* ircd sets to low process priority so it doesnt hog the box */ + if (unlimitcore) + { + 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); } @@ -335,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; @@ -406,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; @@ -510,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; @@ -651,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) @@ -661,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); }