From 490dc15128e3495ff82c9b0b6ffdce7e0ff6c41f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B6nke=20Ludwig?= Date: Mon, 30 Jan 2017 22:52:13 +0100 Subject: [PATCH] Properly handle the case where a TCP connection gets immediately disconnected. This can result in both, the write-ready and the disconnect events, to be triggered during the same event loop iteration. --- source/eventcore/drivers/posix/sockets.d | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/source/eventcore/drivers/posix/sockets.d b/source/eventcore/drivers/posix/sockets.d index 354c341..fdd08d0 100644 --- a/source/eventcore/drivers/posix/sockets.d +++ b/source/eventcore/drivers/posix/sockets.d @@ -108,9 +108,9 @@ final class PosixEventDriverSockets(Loop : PosixEventLoop) : EventDriverSockets m_loop.setNotifyCallback!(EventType.write)(sock, null); with (m_loop.m_fds[sock].streamSocket) { state = ConnectionState.connected; - assert(connectCallback !is null); - connectCallback(cast(StreamSocketFD)sock, ConnectStatus.connected); + auto cb = connectCallback; connectCallback = null; + if (cb) cb(cast(StreamSocketFD)sock, ConnectStatus.connected); } } @@ -253,13 +253,11 @@ final class PosixEventDriverSockets(Loop : PosixEventLoop) : EventDriverSockets } if (ret == 0 && buffer.length > 0) { - print("disconnect"); on_read_finish(socket, IOStatus.disconnected, 0); return; } if (ret < 0 && mode == IOMode.immediate) { - print("wouldblock"); on_read_finish(socket, IOStatus.wouldBlock, 0); return; }