Commit e6fd088b authored by Neel Goyal's avatar Neel Goyal Committed by Facebook Github Bot 0

Add method to get the connect timeout used for an AsyncSocket

Summary: Have the AsyncSocket keep track of the timeout used for connecting and add a getter to retrieve it.

Reviewed By: hiteshk

Differential Revision: D3170625

fb-gh-sync-id: 61d0ecd8d975c49978a1cf222671aa16a2160499
fbshipit-source-id: 61d0ecd8d975c49978a1cf222671aa16a2160499
parent fe2af2cc
...@@ -321,6 +321,7 @@ void AsyncSocket::connect(ConnectCallback* callback, ...@@ -321,6 +321,7 @@ void AsyncSocket::connect(ConnectCallback* callback,
return invalidState(callback); return invalidState(callback);
} }
connectTimeout_ = std::chrono::milliseconds(timeout);
connectStartTime_ = std::chrono::steady_clock::now(); connectStartTime_ = std::chrono::steady_clock::now();
// Make connect end time at least >= connectStartTime. // Make connect end time at least >= connectStartTime.
connectEndTime_ = connectStartTime_; connectEndTime_ = connectStartTime_;
......
...@@ -257,15 +257,19 @@ class AsyncSocket : virtual public AsyncTransportWrapper { ...@@ -257,15 +257,19 @@ class AsyncSocket : virtual public AsyncTransportWrapper {
* does not succeed within this period, * does not succeed within this period,
* callback->connectError() will be invoked. * callback->connectError() will be invoked.
*/ */
virtual void connect(ConnectCallback* callback, virtual void connect(
const folly::SocketAddress& address, ConnectCallback* callback,
int timeout = 0, const folly::SocketAddress& address,
const OptionMap &options = emptyOptionMap, int timeout = 0,
const folly::SocketAddress& bindAddr = anyAddress() const OptionMap& options = emptyOptionMap,
) noexcept; const folly::SocketAddress& bindAddr = anyAddress()) noexcept;
void connect(ConnectCallback* callback, const std::string& ip, uint16_t port,
int timeout = 00, void connect(
const OptionMap &options = emptyOptionMap) noexcept; ConnectCallback* callback,
const std::string& ip,
uint16_t port,
int timeout = 0,
const OptionMap& options = emptyOptionMap) noexcept;
/** /**
* If a connect request is in-flight, cancels it and closes the socket * If a connect request is in-flight, cancels it and closes the socket
...@@ -406,6 +410,10 @@ class AsyncSocket : virtual public AsyncTransportWrapper { ...@@ -406,6 +410,10 @@ class AsyncSocket : virtual public AsyncTransportWrapper {
return connectEndTime_ - connectStartTime_; return connectEndTime_ - connectStartTime_;
} }
std::chrono::milliseconds getConnectTimeout() const {
return connectTimeout_;
}
// Methods controlling socket options // Methods controlling socket options
/** /**
...@@ -802,6 +810,8 @@ class AsyncSocket : virtual public AsyncTransportWrapper { ...@@ -802,6 +810,8 @@ class AsyncSocket : virtual public AsyncTransportWrapper {
std::chrono::steady_clock::time_point connectStartTime_; std::chrono::steady_clock::time_point connectStartTime_;
std::chrono::steady_clock::time_point connectEndTime_; std::chrono::steady_clock::time_point connectEndTime_;
std::chrono::milliseconds connectTimeout_{0};
BufferCallback* bufferCallback_{nullptr}; BufferCallback* bufferCallback_{nullptr};
}; };
#ifdef _MSC_VER #ifdef _MSC_VER
......
...@@ -98,6 +98,7 @@ TEST(AsyncSocketTest, Connect) { ...@@ -98,6 +98,7 @@ TEST(AsyncSocketTest, Connect) {
CHECK_EQ(cb.state, STATE_SUCCEEDED); CHECK_EQ(cb.state, STATE_SUCCEEDED);
EXPECT_LE(0, socket->getConnectTime().count()); EXPECT_LE(0, socket->getConnectTime().count());
EXPECT_EQ(socket->getConnectTimeout(), std::chrono::milliseconds(30));
} }
/** /**
...@@ -118,6 +119,7 @@ TEST(AsyncSocketTest, ConnectRefused) { ...@@ -118,6 +119,7 @@ TEST(AsyncSocketTest, ConnectRefused) {
CHECK_EQ(cb.state, STATE_FAILED); CHECK_EQ(cb.state, STATE_FAILED);
CHECK_EQ(cb.exception.getType(), AsyncSocketException::NOT_OPEN); CHECK_EQ(cb.exception.getType(), AsyncSocketException::NOT_OPEN);
EXPECT_LE(0, socket->getConnectTime().count()); EXPECT_LE(0, socket->getConnectTime().count());
EXPECT_EQ(socket->getConnectTimeout(), std::chrono::milliseconds(30));
} }
/** /**
...@@ -156,6 +158,7 @@ TEST(AsyncSocketTest, ConnectTimeout) { ...@@ -156,6 +158,7 @@ TEST(AsyncSocketTest, ConnectTimeout) {
socket->getPeerAddress(&peer); socket->getPeerAddress(&peer);
CHECK_EQ(peer, addr); CHECK_EQ(peer, addr);
EXPECT_LE(0, socket->getConnectTime().count()); EXPECT_LE(0, socket->getConnectTime().count());
EXPECT_EQ(socket->getConnectTimeout(), std::chrono::milliseconds(1));
} }
/** /**
...@@ -190,6 +193,7 @@ TEST(AsyncSocketTest, ConnectAndWrite) { ...@@ -190,6 +193,7 @@ TEST(AsyncSocketTest, ConnectAndWrite) {
ASSERT_TRUE(socket->isClosedBySelf()); ASSERT_TRUE(socket->isClosedBySelf());
ASSERT_FALSE(socket->isClosedByPeer()); ASSERT_FALSE(socket->isClosedByPeer());
EXPECT_EQ(socket->getConnectTimeout(), std::chrono::milliseconds(30));
} }
/** /**
......
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