X-Git-Url: http://plrg.eecs.uci.edu/git/?p=folly.git;a=blobdiff_plain;f=folly%2Fio%2Fasync%2FAsyncSocketException.h;h=1e9a114ad8584b4e5eb12d063d8209050a7be635;hp=7732b56295505a111eb074fde051f3993930ed5e;hb=2a4ad2c8ddc1eb1be8b7ffb607de954ccc2b666e;hpb=d4aacd244f21e76dce685365acc281a9015897c1 diff --git a/folly/io/async/AsyncSocketException.h b/folly/io/async/AsyncSocketException.h index 7732b562..1e9a114a 100644 --- a/folly/io/async/AsyncSocketException.h +++ b/folly/io/async/AsyncSocketException.h @@ -1,5 +1,5 @@ /* - * Copyright 2017 Facebook, Inc. + * Copyright 2017-present Facebook, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,17 +13,17 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - #pragma once #include +#include -#include -#include +#include +#include namespace folly { -class AsyncSocketException : public std::runtime_error { +class FOLLY_EXPORT AsyncSocketException : public std::runtime_error { public: enum AsyncSocketExceptionType { UNKNOWN = 0, @@ -40,16 +40,17 @@ class AsyncSocketException : public std::runtime_error { SSL_ERROR = 12, COULD_NOT_BIND = 13, SASL_HANDSHAKE_TIMEOUT = 14, - NETWORK_ERROR = 15 + NETWORK_ERROR = 15, + EARLY_DATA_REJECTED = 16, }; - AsyncSocketException(AsyncSocketExceptionType type, - const std::string& message, - int errno_copy = 0) - : std::runtime_error( - AsyncSocketException::getMessage(type, message, errno_copy)), + AsyncSocketException( + AsyncSocketExceptionType type, + const std::string& message, + int errnoCopy = 0) + : std::runtime_error(getMessage(type, message, errnoCopy)), type_(type), - errno_(errno_copy) {} + errno_(errnoCopy) {} /** Error code */ AsyncSocketExceptionType type_; @@ -57,71 +58,24 @@ class AsyncSocketException : public std::runtime_error { /** A copy of the errno. */ int errno_; - AsyncSocketExceptionType getType() const noexcept { return type_; } - int getErrno() const noexcept { return errno_; } + AsyncSocketExceptionType getType() const noexcept { + return type_; + } - protected: - /** Just like strerror_r but returns a C++ string object. */ - static std::string strerror_s(int errno_copy) { - return folly::sformat("errno = {} ({})", errno_copy, strerror(errno_copy)); + int getErrno() const noexcept { + return errno_; } + protected: /** get the string of exception type */ static folly::StringPiece getExceptionTypeString( - AsyncSocketExceptionType type) { - switch (type) { - case UNKNOWN: - return "Unknown async socket exception"; - case NOT_OPEN: - return "Socket not open"; - case ALREADY_OPEN: - return "Socket already open"; - case TIMED_OUT: - return "Timed out"; - case END_OF_FILE: - return "End of file"; - case INTERRUPTED: - return "Interrupted"; - case BAD_ARGS: - return "Invalid arguments"; - case CORRUPTED_DATA: - return "Corrupted Data"; - case INTERNAL_ERROR: - return "Internal error"; - case NOT_SUPPORTED: - return "Not supported"; - case INVALID_STATE: - return "Invalid state"; - case SSL_ERROR: - return "SSL error"; - case COULD_NOT_BIND: - return "Could not bind"; - case SASL_HANDSHAKE_TIMEOUT: - return "SASL handshake timeout"; - case NETWORK_ERROR: - return "Network error"; - default: - return "(Invalid exception type)"; - } - } + AsyncSocketExceptionType type); /** Return a message based on the input. */ - static std::string getMessage(AsyncSocketExceptionType type, - const std::string& message, - int errno_copy) { - if (errno_copy != 0) { - return folly::sformat( - "AsyncSocketException: {}, type = {}, errno = {} ({})", - message, - AsyncSocketException::getExceptionTypeString(type), - errno_copy, - strerror(errno_copy)); - } else { - return folly::sformat("AsyncSocketException: {}, type = {}", - message, - AsyncSocketException::getExceptionTypeString(type)); - } - } + static std::string getMessage( + AsyncSocketExceptionType type, + const std::string& message, + int errnoCopy); }; } // namespace folly