We recently uncovered two issues with the LibeventSSLSocketImpl::shutdown method:
- The introduction of a shutdown method parameter with this commit means that the implementation's method is no longer overriding the default implementation. In addition to fixing the implementation method's signature, we should add the override specifier to all of our socket implementations' methods to ensure that this doesn't happen in the future.
- The LibeventSSLSocketImpl::shutdown function does not actually shutdown the SSL socket. The proper function to shutdown an SSL socket is SSL_shutdown, which is called in the implementation's destructor. We should move this into shutdown() so that by the time that method returns, the socket has actually been shutdown.