Ejemplo n.º 1
0
        protected override void ApplyKeepAliveValues(Socket socket, KeepAliveConfig keepAliveConfig)
        {
            if (CanSetSocketOptionKeepAliveRetryCount)
            {
                socket.SetSocketOption(SocketOptionLevel.Tcp, TcpKeepAliveRetryCount, keepAliveConfig.RetryCount);
            }

            if (CanSetSocketOptionsKeepAliveTimeAndInterval)
            {
                socket.SetSocketOption(SocketOptionLevel.Tcp, TcpKeepAliveTime, keepAliveConfig.Time);
                socket.SetSocketOption(SocketOptionLevel.Tcp, TcpKeepAliveInterval, keepAliveConfig.Interval);
                return;
            }

            // Call WSAIoctl via IOControl
            if (KeepAliveConfigurationIsUpToDate(keepAliveConfig))
            {
                socket.IOControl(IOControlCode.KeepAliveValues, ioControlKeepAliveValues, null);
                return;
            }
            keepAliveConfiguration = keepAliveConfig;
            var buffer = ioControlKeepAliveValues ?? (ioControlKeepAliveValues = new byte[3 * sizeof(uint)]);

            BitConverter.GetBytes(keepAliveConfig.Enabled ? 1u : 0u).CopyTo(buffer, 0);
            BitConverter.GetBytes((uint)keepAliveConfig.Time * 1000).CopyTo(buffer, sizeof(uint));
            BitConverter.GetBytes((uint)keepAliveConfig.Interval * 1000).CopyTo(buffer, sizeof(uint) * 2);
            socket.IOControl(IOControlCode.KeepAliveValues, buffer, null);
        }
Ejemplo n.º 2
0
 public Tcp(TcpConfig tcpConfig) : base(tcpConfig.Server, tcpConfig.Port, tcpConfig.ReconnectInterval)
 {
     keepAliveConfig            = tcpConfig.KeepAlive;
     useTls                     = tcpConfig.Tls.Enabled;
     retrieveClientCertificates = tcpConfig.Tls.RetrieveClientCertificates;
     framing                    = tcpConfig.Framing;
 }
Ejemplo n.º 3
0
 public Tcp(TcpConfig tcpConfig) : base(tcpConfig.Server, tcpConfig.Port, tcpConfig.ReconnectInterval)
 {
     this.remoteCertificateValidationCallback = tcpConfig.RemoteCertificateValidationCallback;
     keepAliveConfig            = tcpConfig.KeepAlive;
     useTls                     = tcpConfig.Tls.Enabled;
     retrieveClientCertificates = tcpConfig.Tls.RetrieveClientCertificates;
     framing                    = tcpConfig.Framing;
 }
Ejemplo n.º 4
0
 public void SetKeepAlive(KeepAliveConfig keepAliveConfig)
 {
     Socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, keepAliveConfig.Enabled);
     if (keepAliveConfig.Enabled)
     {
         ApplyKeepAliveValues(keepAliveConfig);
     }
 }
Ejemplo n.º 5
0
 private static bool KeepAliveConfigurationIsUpToDate(KeepAliveConfig keepAliveConfig)
 {
     return(keepAliveConfiguration != null &&
            keepAliveConfiguration.Enabled == keepAliveConfig.Enabled &&
            keepAliveConfiguration.RetryCount == keepAliveConfig.RetryCount &&
            keepAliveConfiguration.Time == keepAliveConfig.Time &&
            keepAliveConfiguration.Interval == keepAliveConfig.Interval);
 }
Ejemplo n.º 6
0
 public Tcp(TcpConfig tcpConfig) : base(tcpConfig.Server, tcpConfig.Port, tcpConfig.ReconnectInterval)
 {
     connectionCheckTimeout = tcpConfig.ConnectionCheckTimeout;
     keepAliveConfig        = tcpConfig.KeepAlive;
     useTls = tcpConfig.Tls.Enabled;
     retrieveClientCertificates = tcpConfig.Tls.RetrieveClientCertificates;
     framing       = tcpConfig.Framing;
     dataChunkSize = tcpConfig.DataChunkSize;
 }
        public IOControlKeepAliveValues(KeepAliveConfig keepAliveConfig)
        {
            var uintSize = Marshal.SizeOf(typeof(uint));

            onOffOffset    = 0;
            timeOffset     = uintSize;
            intervalOffset = 2 * uintSize;
            structSize     = 3 * uintSize;
            onOff          = (uint)(keepAliveConfig.Enabled ? 1 : 0);
            timeMs         = (uint)keepAliveConfig.Time * 1000;
            intervalMs     = (uint)keepAliveConfig.Interval * 1000;
        }
Ejemplo n.º 8
0
        public KeepAlive(KeepAliveConfig keepAliveConfig)
        {
            var uintSize = Marshal.SizeOf(typeof(uint));

            onOffOffset    = 0;
            timeOffset     = uintSize;
            intervalOffset = 2 * uintSize;
            structSize     = 3 * uintSize;
            onOff          = (uint)(keepAliveConfig.Enabled ? 1 : 0);
            time           = (uint)keepAliveConfig.Timeout;
            interval       = (uint)keepAliveConfig.Interval;
        }
Ejemplo n.º 9
0
        protected override void ApplyKeepAliveValues(KeepAliveConfig keepAliveConfig)
        {
            if (isWin10V1703OrLater)
            {
                Socket.SetSocketOption(SocketOptionLevel.Tcp, TcpKeepAliveRetryCount, keepAliveConfig.RetryCount);
            }

            if (isBelowWin10V1709)
            {
                // Call WSAIoctl via IOControl
                Socket.IOControl(IOControlCode.KeepAliveValues, new IOControlKeepAliveValues(keepAliveConfig).ToByteArray(), null);
                return;
            }
            Socket.SetSocketOption(SocketOptionLevel.Tcp, TcpKeepAliveTime, keepAliveConfig.Time);
            Socket.SetSocketOption(SocketOptionLevel.Tcp, TcpKeepAliveInterval, keepAliveConfig.Interval);
        }
 protected override void ApplyKeepAliveValues(Socket socket, KeepAliveConfig keepAliveConfig)
 {
     Interop.SetSockOptSysCall(socket, SocketOptionLevel.Tcp, TcpKeepAliveRetryCount, keepAliveConfig.RetryCount);
     Interop.SetSockOptSysCall(socket, SocketOptionLevel.Tcp, TcpKeepAliveTime, keepAliveConfig.Time);
     Interop.SetSockOptSysCall(socket, SocketOptionLevel.Tcp, TcpKeepAliveInterval, keepAliveConfig.Interval);
 }
Ejemplo n.º 11
0
 protected abstract void ApplyKeepAliveValues(KeepAliveConfig keepAliveConfig);
Ejemplo n.º 12
0
 protected abstract void ApplyKeepAliveValues(Socket socket, KeepAliveConfig keepAliveConfig);