Commit 95084352 authored by Dave Watson's avatar Dave Watson Committed by dcsommer

AsyncSocket

Summary:
Move async socket to folly.

Changes:
* Made an AsyncSocketException type instead of TTransportException: Some of the exceptions didn't fit nicely in to std::exception types (like TIMED_OUT).  There are some wrappers in thrift/lib/cpp/async to convert back to TTransportException, so all existing code still compiles.
* Moved read/write callbacks out of AsyncTransport: filters are going to want to do the read/write stuff separately (see revproxy/tunnel/filters, and discussions in D1483148).

Test Plan:
fbconfig -r thrift; fbmake runtests
contbuild should catch everything else - exception types shouldn't change for existing code

Reviewed By: dcsommer@fb.com

Subscribers: mshneer, folly-diffs@, trunkagent, doug, alandau, bmatheny, njormrod, fugalh, jsedgwick

FB internal diff: D1587625
parent eec32a76
......@@ -131,6 +131,7 @@ nobase_follyinclude_HEADERS = \
io/ShutdownSocketSet.h \
io/async/AsyncTimeout.h \
io/async/AsyncServerSocket.h \
io/async/AsyncSocket.h \
io/async/DelayedDestruction.h \
io/async/EventBase.h \
io/async/EventBaseManager.h \
......@@ -258,6 +259,7 @@ libfolly_la_SOURCES = \
io/ShutdownSocketSet.cpp \
io/async/AsyncTimeout.cpp \
io/async/AsyncServerSocket.cpp \
io/async/AsyncSocket.cpp \
io/async/EventBase.cpp \
io/async/EventBaseManager.cpp \
io/async/EventHandler.cpp \
......
This diff is collapsed.
This diff is collapsed.
/*
* Copyright 2014 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#pragma once
#include <folly/io/async/DelayedDestruction.h>
namespace folly {
class AsyncSocketException : public std::runtime_error {
public:
enum AsyncSocketExceptionType
{ UNKNOWN = 0
, NOT_OPEN = 1
, ALREADY_OPEN = 2
, TIMED_OUT = 3
, END_OF_FILE = 4
, INTERRUPTED = 5
, BAD_ARGS = 6
, CORRUPTED_DATA = 7
, INTERNAL_ERROR = 8
, NOT_SUPPORTED = 9
, INVALID_STATE = 10
, SSL_ERROR = 12
, COULD_NOT_BIND = 13
, SASL_HANDSHAKE_TIMEOUT = 14
};
AsyncSocketException(
AsyncSocketExceptionType type, const std::string& message) :
std::runtime_error(message),
type_(type), errno_(0) {}
/** Error code */
AsyncSocketExceptionType type_;
/** A copy of the errno. */
int errno_;
AsyncSocketException(AsyncSocketExceptionType type,
const std::string& message,
int errno_copy) :
std::runtime_error(getMessage(message, errno_copy)),
type_(type), errno_(errno_copy) {}
AsyncSocketExceptionType getType() const noexcept { return type_; }
int getErrno() const noexcept { return errno_; }
protected:
/** Just like strerror_r but returns a C++ string object. */
std::string strerror_s(int errno_copy) {
return "errno = " + folly::to<std::string>(errno_copy);
}
/** Return a message based on the input. */
std::string getMessage(const std::string &message,
int errno_copy) {
if (errno_copy != 0) {
return message + ": " + strerror_s(errno_copy);
} else {
return message;
}
}
};
} // folly
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment