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); }
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; }
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; }
public void SetKeepAlive(KeepAliveConfig keepAliveConfig) { Socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, keepAliveConfig.Enabled); if (keepAliveConfig.Enabled) { ApplyKeepAliveValues(keepAliveConfig); } }
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); }
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; }
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; }
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); }
protected abstract void ApplyKeepAliveValues(KeepAliveConfig keepAliveConfig);
protected abstract void ApplyKeepAliveValues(Socket socket, KeepAliveConfig keepAliveConfig);