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