From 63e300ed082b82530ad5ae0949f45686746b7c9b Mon Sep 17 00:00:00 2001 From: Peter Powell Date: Sun, 22 Oct 2017 03:10:48 +0100 Subject: [PATCH 1/1] Deduplicate error handling in the socket engines. --- include/socketengine.h | 3 +++ src/socketengine.cpp | 9 +++++++++ src/socketengines/socketengine_epoll.cpp | 11 +---------- src/socketengines/socketengine_kqueue.cpp | 11 ++--------- src/socketengines/socketengine_poll.cpp | 1 - 5 files changed, 15 insertions(+), 20 deletions(-) diff --git a/include/socketengine.h b/include/socketengine.h index 34dd306ba..0187a043e 100644 --- a/include/socketengine.h +++ b/include/socketengine.h @@ -283,6 +283,9 @@ class CoreExport SocketEngine /** Look up the fd limit using rlimit. */ static void LookupMaxFds(); + /** Terminates the program when the socket engine fails to initialize. */ + static void InitError(); + static void OnSetEvent(EventHandler* eh, int old_mask, int new_mask); /** Add an event handler to the base socket engine. AddFd(EventHandler*, int) should call this. diff --git a/src/socketengine.cpp b/src/socketengine.cpp index bac97a6dc..58e15af44 100644 --- a/src/socketengine.cpp +++ b/src/socketengine.cpp @@ -21,8 +21,11 @@ */ +#include "exitcodes.h" #include "inspircd.h" +#include + /** Reference table, contains all current handlers **/ std::vector SocketEngine::ref; @@ -60,6 +63,12 @@ void EventHandler::OnEventHandlerError(int errornum) { } +void SocketEngine::InitError() +{ + std::cerr << con_red << "FATAL ERROR!" << con_reset << " Socket engine initialization failed. " << strerror(errno) << '.' << std::endl; + ServerInstance->QuickExit(EXIT_STATUS_SOCKETENGINE); +} + void SocketEngine::LookupMaxFds() { struct rlimit limits; diff --git a/src/socketengines/socketengine_epoll.cpp b/src/socketengines/socketengine_epoll.cpp index dc10a3613..60b365ee1 100644 --- a/src/socketengines/socketengine_epoll.cpp +++ b/src/socketengines/socketengine_epoll.cpp @@ -19,11 +19,9 @@ #include "inspircd.h" -#include "exitcodes.h" #include #include -#include /** A specialisation of the SocketEngine class, designed to use linux 2.6 epoll(). */ @@ -43,15 +41,8 @@ void SocketEngine::Init() // 128 is not a maximum, just a hint at the eventual number of sockets that may be polled, // and it is completely ignored by 2.6.8 and later kernels, except it must be larger than zero. EngineHandle = epoll_create(128); - if (EngineHandle == -1) - { - ServerInstance->Logs->Log("SOCKET", LOG_DEFAULT, "ERROR: Could not initialize socket engine: %s", strerror(errno)); - ServerInstance->Logs->Log("SOCKET", LOG_DEFAULT, "ERROR: Your kernel probably does not have the proper features. This is a fatal error, exiting now."); - std::cout << "ERROR: Could not initialize epoll socket engine: " << strerror(errno) << std::endl; - std::cout << "ERROR: Your kernel probably does not have the proper features. This is a fatal error, exiting now." << std::endl; - ServerInstance->QuickExit(EXIT_STATUS_SOCKETENGINE); - } + InitError(); } void SocketEngine::RecoverFromFork() diff --git a/src/socketengines/socketengine_kqueue.cpp b/src/socketengines/socketengine_kqueue.cpp index c969af1fd..b23cfbd9d 100644 --- a/src/socketengines/socketengine_kqueue.cpp +++ b/src/socketengines/socketengine_kqueue.cpp @@ -20,11 +20,10 @@ #include "inspircd.h" -#include "exitcodes.h" + #include #include #include -#include #include /** A specialisation of the SocketEngine class, designed to use BSD kqueue(). @@ -59,13 +58,7 @@ void SocketEngine::RecoverFromFork() */ EngineHandle = kqueue(); if (EngineHandle == -1) - { - ServerInstance->Logs->Log("SOCKET", LOG_DEFAULT, "ERROR: Could not initialize socket engine. Your kernel probably does not have the proper features."); - ServerInstance->Logs->Log("SOCKET", LOG_DEFAULT, "ERROR: this is a fatal error, exiting now."); - std::cout << "ERROR: Could not initialize socket engine. Your kernel probably does not have the proper features." << std::endl; - std::cout << "ERROR: this is a fatal error, exiting now." << std::endl; - ServerInstance->QuickExit(EXIT_STATUS_SOCKETENGINE); - } + InitError(); } /** Shutdown the kqueue engine diff --git a/src/socketengines/socketengine_poll.cpp b/src/socketengines/socketengine_poll.cpp index c80593588..339045a8c 100644 --- a/src/socketengines/socketengine_poll.cpp +++ b/src/socketengines/socketengine_poll.cpp @@ -21,7 +21,6 @@ */ -#include "exitcodes.h" #include "inspircd.h" #include -- 2.39.2