fix setKeepAliveParams on Windows

This commit is contained in:
Boris-Barboris 2018-04-02 18:06:00 +03:00
parent 322438697c
commit a2d96f1831
2 changed files with 7 additions and 4 deletions

View file

@ -8,6 +8,8 @@ import eventcore.internal.win32;
import eventcore.internal.utils : AlgebraicChoppedVector, print, nogc_assert; import eventcore.internal.utils : AlgebraicChoppedVector, print, nogc_assert;
import std.socket : Address; import std.socket : Address;
import core.time: Duration;
private enum WM_USER_SOCKET = WM_USER + 1; private enum WM_USER_SOCKET = WM_USER + 1;
@ -225,7 +227,8 @@ final class WinAPIEventDriverSockets : EventDriverSockets {
{ {
tcp_keepalive opts = tcp_keepalive(1, cast(ulong) idle.total!"msecs"(), tcp_keepalive opts = tcp_keepalive(1, cast(ulong) idle.total!"msecs"(),
cast(ulong) interval.total!"msecs"); cast(ulong) interval.total!"msecs");
int result = WSAIoctl(socket, SIO_KEEPALIVE_VALS, &opts, tcp_keepalive.sizeof, null, 0, null, null); int result = WSAIoctl(socket, SIO_KEEPALIVE_VALS, &opts, cast(uint) tcp_keepalive.sizeof,
null, 0, null, null, null);
if (result != 0) if (result != 0)
{ {
print("WSAIoctl SIO_KEEPALIVE_VALS returned %d", result); print("WSAIoctl SIO_KEEPALIVE_VALS returned %d", result);

View file

@ -112,18 +112,18 @@ struct tcp_keepalive {
}; };
// https://gist.github.com/piscisaureus/906386#file-winsock2-h-L1099 // https://gist.github.com/piscisaureus/906386#file-winsock2-h-L1099
enum : ulong { enum : DWORD {
IOC_VENDOR = 0x18000000, IOC_VENDOR = 0x18000000,
IOC_OUT = 0x40000000, IOC_OUT = 0x40000000,
IOC_IN = 0x80000000 IOC_IN = 0x80000000
} }
ulong _WSAIOW(ulong x, ulong y) pure @safe DWORD _WSAIOW(DWORD x, DWORD y) pure @safe
{ {
return IOC_IN | x | y; return IOC_IN | x | y;
} }
enum : ulong { enum : DWORD {
SIO_KEEPALIVE_VALS = _WSAIOW(IOC_VENDOR, 4) SIO_KEEPALIVE_VALS = _WSAIOW(IOC_VENDOR, 4)
} }