From d8f10972ebfdb0290b0f2affd691d0b9a342ce51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B6nke=20Ludwig?= Date: Sun, 15 Jan 2017 17:21:18 +0100 Subject: [PATCH] Added EventDriverSockets.setKeepAlive. --- source/eventcore/driver.d | 1 + source/eventcore/drivers/libasync.d | 5 +++++ source/eventcore/drivers/posix.d | 6 ++++++ source/eventcore/drivers/winapi.d | 5 +++++ 4 files changed, 17 insertions(+) diff --git a/source/eventcore/driver.d b/source/eventcore/driver.d index 5f8e68b..efb914f 100644 --- a/source/eventcore/driver.d +++ b/source/eventcore/driver.d @@ -84,6 +84,7 @@ interface EventDriverSockets { void waitForConnections(StreamListenSocketFD sock, AcceptCallback on_accept); ConnectionState getConnectionState(StreamSocketFD sock); void setTCPNoDelay(StreamSocketFD socket, bool enable); + void setKeepAlive(StreamSocketFD socket, bool enable); void read(StreamSocketFD socket, ubyte[] buffer, IOMode mode, IOCallback on_read_finish); void cancelRead(StreamSocketFD socket); void write(StreamSocketFD socket, const(ubyte)[] buffer, IOMode mode, IOCallback on_write_finish); diff --git a/source/eventcore/drivers/libasync.d b/source/eventcore/drivers/libasync.d index 172cf3f..69f2a3c 100644 --- a/source/eventcore/drivers/libasync.d +++ b/source/eventcore/drivers/libasync.d @@ -104,6 +104,11 @@ final class LibasyncEventDriverSockets : EventDriverSockets { assert(false, "TODO!"); } + override void setKeepAlive(StreamSocketFD socket, bool enable) + { + assert(false, "TODO!"); + } + override void read(StreamSocketFD socket, ubyte[] buffer, IOMode mode, IOCallback on_read_finish) { assert(false, "TODO!"); diff --git a/source/eventcore/drivers/posix.d b/source/eventcore/drivers/posix.d index 805de7f..f1b5b2d 100644 --- a/source/eventcore/drivers/posix.d +++ b/source/eventcore/drivers/posix.d @@ -350,6 +350,12 @@ final class PosixEventDriverSockets(Loop : PosixEventLoop) : EventDriverSockets () @trusted { setsockopt(socket, IPPROTO_TCP, TCP_NODELAY, cast(char*)&opt, opt.sizeof); } (); } + final override void setKeepAlive(StreamSocketFD socket, bool enable) + { + ubyte opt = enable; + () @trusted { setsockopt(socket, SOL_SOCKET, SO_KEEPALIVE, cast(char*)&opt, opt.sizeof); } (); + } + final override void read(StreamSocketFD socket, ubyte[] buffer, IOMode mode, IOCallback on_read_finish) { if (buffer.length == 0) { diff --git a/source/eventcore/drivers/winapi.d b/source/eventcore/drivers/winapi.d index eea77e3..8389f6c 100644 --- a/source/eventcore/drivers/winapi.d +++ b/source/eventcore/drivers/winapi.d @@ -111,6 +111,11 @@ final class WinAPIEventDriverSockets : EventDriverSockets { assert(false, "TODO!"); } + override void setKeepAlive(StreamSocketFD socket, bool enable) + { + assert(false, "TODO!"); + } + override void read(StreamSocketFD socket, ubyte[] buffer, IOMode mode, IOCallback on_read_finish) { assert(false, "TODO!");