in wangle/acceptor/Acceptor.cpp [277:319]
void Acceptor::processEstablishedConnection(
int fd,
const SocketAddress& clientAddr,
std::chrono::steady_clock::time_point acceptTime,
TransportInfo& tinfo) noexcept {
bool shouldDoSSL = false;
if (accConfig_.isSSL()) {
CHECK(sslCtxManager_);
shouldDoSSL = sslCtxManager_->getDefaultSSLCtx() != nullptr;
}
if (shouldDoSSL) {
AsyncSSLSocket::UniquePtr sslSock(makeNewAsyncSSLSocket(
sslCtxManager_->getDefaultSSLCtx(), base_, fd, &clientAddr));
++numPendingSSLConns_;
if (numPendingSSLConns_ > accConfig_.maxConcurrentSSLHandshakes) {
VLOG(2) << "dropped SSL handshake on " << accConfig_.name
<< " too many handshakes in progress";
auto error = SSLErrorEnum::DROPPED;
auto latency = std::chrono::milliseconds(0);
auto ex = folly::make_exception_wrapper<SSLException>(
error, latency, sslSock->getRawBytesReceived());
updateSSLStats(sslSock.get(), latency, error, ex);
sslConnectionError(ex);
return;
}
tinfo.tfoSucceded = sslSock->getTFOSucceded();
for (const auto& cb : observerList_.getAll()) {
cb->accept(sslSock.get());
}
startHandshakeManager(
std::move(sslSock), this, clientAddr, acceptTime, tinfo);
} else {
tinfo.secure = false;
tinfo.acceptTime = acceptTime;
AsyncSocket::UniquePtr sock(makeNewAsyncSocket(base_, fd, &clientAddr));
tinfo.tfoSucceded = sock->getTFOSucceded();
for (const auto& cb : observerList_.getAll()) {
cb->accept(sock.get());
}
plaintextConnectionReady(std::move(sock), clientAddr, tinfo);
}
}