diff --git a/src/DotNetty.Handlers/Tls/TlsHandler.Writer.cs b/src/DotNetty.Handlers/Tls/TlsHandler.Writer.cs index 786a039f..4d8fa6e9 100644 --- a/src/DotNetty.Handlers/Tls/TlsHandler.Writer.cs +++ b/src/DotNetty.Handlers/Tls/TlsHandler.Writer.cs @@ -38,6 +38,8 @@ namespace DotNetty.Handlers.Tls partial class TlsHandler { + static readonly byte[] ZeroBuf = new byte[0]; + private IPromise _lastContextWritePromise; private volatile int v_wrapDataSize = TlsUtils.MAX_PLAINTEXT_LENGTH; @@ -168,7 +170,14 @@ private void Wrap(IChannelHandlerContext context) composite.Release(); } _lastContextWritePromise = promise; - _ = buf.ReadBytes(_sslStream, readableBytes); // this leads to FinishWrap being called 0+ times + if (buf.IsReadable()) + { + _ = buf.ReadBytes(_sslStream, readableBytes); // this leads to FinishWrap being called 0+ times + } + else if (promise != null) + { + FinishWrap(ZeroBuf, 0, 0, promise); + } } catch (Exception exc) {