Commit ea8e5b3b authored by Orvid King's avatar Orvid King Committed by Facebook Github Bot

std::chrono'ize AsyncSSLSocketConnector

Summary: Nothing breaks so....

Reviewed By: yfeldblum, siyengar

Differential Revision: D4377965

fbshipit-source-id: 53c42e7f6f3a71aedd4b9a089ffca9d3c8472029
parent fd89379f
...@@ -77,42 +77,42 @@ class AsyncSSLSocketConnector: public AsyncSocket::ConnectCallback, ...@@ -77,42 +77,42 @@ class AsyncSSLSocketConnector: public AsyncSocket::ConnectCallback,
private: private:
AsyncSSLSocket *sslSocket_; AsyncSSLSocket *sslSocket_;
AsyncSSLSocket::ConnectCallback *callback_; AsyncSSLSocket::ConnectCallback *callback_;
int timeout_; std::chrono::milliseconds timeout_;
int64_t startTime_; std::chrono::steady_clock::time_point startTime_;
protected: protected:
~AsyncSSLSocketConnector() override {} ~AsyncSSLSocketConnector() override {}
public: public:
AsyncSSLSocketConnector(AsyncSSLSocket *sslSocket, AsyncSSLSocketConnector(
AsyncSocket::ConnectCallback *callback, AsyncSSLSocket* sslSocket,
int timeout) : AsyncSocket::ConnectCallback* callback,
sslSocket_(sslSocket), std::chrono::milliseconds timeout)
callback_(callback), : sslSocket_(sslSocket),
timeout_(timeout), callback_(callback),
startTime_(std::chrono::duration_cast<std::chrono::milliseconds>( timeout_(timeout),
std::chrono::steady_clock::now().time_since_epoch()).count()) { startTime_(std::chrono::steady_clock::now()) {}
}
void connectSuccess() noexcept override { void connectSuccess() noexcept override {
VLOG(7) << "client socket connected"; VLOG(7) << "client socket connected";
int64_t timeoutLeft = 0; std::chrono::milliseconds timeoutLeft{0};
if (timeout_ > 0) { if (timeout_ > std::chrono::milliseconds::zero()) {
auto curTime = std::chrono::duration_cast<std::chrono::milliseconds>( auto curTime = std::chrono::steady_clock::now();
std::chrono::steady_clock::now().time_since_epoch()).count();
timeoutLeft = timeout_ - (curTime - startTime_); timeoutLeft = std::chrono::duration_cast<std::chrono::milliseconds>(
if (timeoutLeft <= 0) { timeout_ - (curTime - startTime_));
if (timeoutLeft <= std::chrono::milliseconds::zero()) {
AsyncSocketException ex( AsyncSocketException ex(
AsyncSocketException::TIMED_OUT, AsyncSocketException::TIMED_OUT,
folly::sformat("SSL connect timed out after {}ms", timeout_)); folly::sformat(
"SSL connect timed out after {}ms", timeout_.count()));
fail(ex); fail(ex);
delete this; delete this;
return; return;
} }
} }
sslSocket_->sslConn(this, std::chrono::milliseconds(timeoutLeft)); sslSocket_->sslConn(this, timeoutLeft);
} }
void connectErr(const AsyncSocketException& ex) noexcept override { void connectErr(const AsyncSocketException& ex) noexcept override {
...@@ -691,8 +691,7 @@ void AsyncSSLSocket::connect( ...@@ -691,8 +691,7 @@ void AsyncSSLSocket::connect(
noTransparentTls_ = true; noTransparentTls_ = true;
totalConnectTimeout_ = totalConnectTimeout; totalConnectTimeout_ = totalConnectTimeout;
if (sslState_ != STATE_UNENCRYPTED) { if (sslState_ != STATE_UNENCRYPTED) {
callback = new AsyncSSLSocketConnector( callback = new AsyncSSLSocketConnector(this, callback, totalConnectTimeout);
this, callback, int(totalConnectTimeout.count()));
} }
AsyncSocket::connect( AsyncSocket::connect(
callback, address, int(connectTimeout.count()), options, bindAddr); callback, address, int(connectTimeout.count()), options, bindAddr);
......
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