Ejemplo n.º 1
0
        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);
        }