From d80855aedfc474e55e321631626ba80a1bbf29f1 Mon Sep 17 00:00:00 2001 From: Danny Robson Date: Fri, 22 Dec 2017 18:34:00 +1100 Subject: [PATCH] posix/except: add exception class for EAI_* codes --- posix/except.cpp | 38 ++++++++++++++++++++++++++++++++++++++ posix/except.hpp | 15 ++++++++++++++- 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/posix/except.cpp b/posix/except.cpp index 40b73638..ef416417 100644 --- a/posix/except.cpp +++ b/posix/except.cpp @@ -97,3 +97,41 @@ error::throw_code (int code) CHECK_NEQ (code, 0); throw error (code); } + + +/////////////////////////////////////////////////////////////////////////////// +using util::posix::eai; + +#include + + +//----------------------------------------------------------------------------- +eai::eai (int code): + runtime_error (gai_strerror (code)), + m_code (code) +{ ; } + + +//----------------------------------------------------------------------------- +int +eai::code (void) const +{ + return m_code; +} + + +//----------------------------------------------------------------------------- +void +eai::try_code (int code) +{ + if (code) + throw_code (code); +} + + +//----------------------------------------------------------------------------- +void +eai::throw_code (int code) +{ + throw eai { code }; +} diff --git a/posix/except.hpp b/posix/except.hpp index a9a6ce8e..44380baf 100644 --- a/posix/except.hpp +++ b/posix/except.hpp @@ -50,6 +50,19 @@ namespace util::posix { private: int m_code; }; -} + + + class eai : public std::runtime_error { + public: + explicit eai (int code); + int code (void) const; + + static void try_code (int); + static void throw_code [[gnu::noreturn]] (int); + + private: + int m_code; + }; +}; #endif