public static unsafe void EnableKeepaliveWindows(this Socket socket, uint time = 2000, uint interval = 500) { QueryKeepalive(socket); tcp_keepalive keepalive = new tcp_keepalive { onoff = 1, keepalivetime = time, keepaliveinterval = interval }; void *pKeepalive = &keepalive; byte[] bytes = new Span <byte>(pKeepalive, sizeof(tcp_keepalive)).ToArray(); byte[] outVals = new byte[bytes.Length]; int retVal = socket.IOControl(IOControlCode.KeepAliveValues, bytes, outVals); if (retVal != 0) { throw new Exception("IOControl(IOControlCode.KeepAliveValues) != 0"); } QueryKeepalive(socket); }