Construct from existing raw pointer
Summary: This diff adds a constructor that takes an `AsyncSocket*`, so that lifecycle observers are informed via `move` when a socket is transformed. If one `AsyncSocket` is constructed from another using the `AsyncSocket(AsyncSocket* oldAsyncSocket)` constructor, then `move(oldSocket, newSocket)` will be triggered for attached observers, allowing the observers to detach from the old socket and attach to the new socket. However, we currently transform between `AsyncSocket` by detaching the fd and event base, and passing them to the new constructor: ``` # from FizzAcceptorHandshakeHelper.cpp auto evb = transport_->getEventBase(); auto fd = transport_->getUnderlyingTransport<folly::AsyncSocket>() ->detachNetworkSocket() .toFd(); transport_.reset(); sslSocket_ = createSSLSocket(sslContext_, evb, fd); ``` When this happens, any `AsyncSocket::LifecycleObserver` that were attached on accept to become separated from the fd/socket that they're attempting to follow. With this change, we can do the following instead (next diff): ``` sslSocket_ = createSSLSocket( sslContext_, transport_->getUnderlyingTransport<folly::AsyncSocket>()); transport_.reset(); ``` Because `createSSLSocket` uses the `AsyncSocket*` constructor, the `move` observer event will be triggered. Differential Revision: D21614835 fbshipit-source-id: 6c995f879fe41935850247a28ff8af2b33349445
Showing
Please register or sign in to comment