During recent work on SSL-enabled tests in libprocess (
MESOS-5966), we discovered a bug in LibeventSSLSocketImpl, wherein the socket can either fail to receive an EOF, or lose data when an EOF is received.
The LibeventSSLSocketImpl::event_callback(short events) method immediately sets any pending RecvRequest's promise to zero upon receipt of an EOF. However, at the time the promise is set, there may actually be data waiting to be read by libevent. Upon receipt of an EOF, we should attempt to read the socket's bufferevent first to ensure that we aren't losing any data previously received by the socket.