// static constructor
        static ClusterKey()
        {
            var defaultTcpStreamSettings = new TcpStreamSettings();

            __defaultReceiveBufferSize = defaultTcpStreamSettings.ReceiveBufferSize;
            __defaultSendBufferSize    = defaultTcpStreamSettings.SendBufferSize;
        }
        public void SocketConfigurator_can_be_used_to_set_keepAlive(
            [Values(false, true)]
            bool async)
        {
            Action <Socket> socketConfigurator = s => s.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true);
            var             settings           = new TcpStreamSettings(socketConfigurator: socketConfigurator);
            var             subject            = new TcpStreamFactory(settings);
            var             endPoint           = CoreTestConfiguration.ConnectionString.Hosts[0];

            Stream stream;

            if (async)
            {
                stream = subject.CreateStreamAsync(endPoint, CancellationToken.None).GetAwaiter().GetResult();
            }
            else
            {
                stream = subject.CreateStream(endPoint, CancellationToken.None);
            }

            var socketProperty = typeof(NetworkStream).GetProperty("Socket", BindingFlags.NonPublic | BindingFlags.Instance);
            var socket         = (Socket)socketProperty.GetValue(stream);
            var keepAlive      = (int)socket.GetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive);

            keepAlive.Should().NotBe(0); // .NET returns 1 but Mono returns 8
        }
Exemple #3
0
 private TcpStreamSettings ConfigureTcp(TcpStreamSettings settings, ClusterKey clusterKey)
 {
     return(settings.With(
                connectTimeout: clusterKey.ConnectTimeout,
                readTimeout: clusterKey.SocketTimeout,
                receiveBufferSize: clusterKey.ReceiveBufferSize,
                sendBufferSize: clusterKey.SendBufferSize,
                writeTimeout: clusterKey.SocketTimeout));
 }
        public async Task CreateStreamAsync_should_call_the_socketConfigurator()
        {
            var             socketConfiguratorWasCalled = false;
            Action <Socket> socketConfigurator          = s => socketConfiguratorWasCalled = true;
            var             settings = new TcpStreamSettings(socketConfigurator: socketConfigurator);
            var             subject  = new TcpStreamFactory(settings);
            var             endPoint = CoreTestConfiguration.ConnectionString.Hosts[0];

            var stream = await subject.CreateStreamAsync(endPoint, CancellationToken.None);

            socketConfiguratorWasCalled.Should().BeTrue();
        }
        // static constructor
        static ClusterKey()
        {
            var defaultServerSettings = new ServerSettings();

            __defaultHeartbeatInterval = defaultServerSettings.HeartbeatInterval;
            __defaultHeartbeatTimeout  = defaultServerSettings.HeartbeatTimeout;

            var defaultTcpStreamSettings = new TcpStreamSettings();

            __defaultReceiveBufferSize = defaultTcpStreamSettings.ReceiveBufferSize;
            __defaultSendBufferSize    = defaultTcpStreamSettings.SendBufferSize;
        }
Exemple #6
0
        private TcpStreamSettings ConfigureTcp(TcpStreamSettings settings, ClusterKey clusterKey)
        {
            if (clusterKey.IPv6)
            {
                settings = settings.With(addressFamily: AddressFamily.InterNetworkV6);
            }

            return(settings.With(
                       connectTimeout: clusterKey.ConnectTimeout,
                       readTimeout: clusterKey.SocketTimeout,
                       receiveBufferSize: clusterKey.ReceiveBufferSize,
                       sendBufferSize: clusterKey.SendBufferSize,
                       writeTimeout: clusterKey.SocketTimeout));
        }
        public async Task SocketConfigurator_can_be_used_to_set_keepAlive()
        {
            Action <Socket> socketConfigurator = s => s.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true);
            var             settings           = new TcpStreamSettings(socketConfigurator: socketConfigurator);
            var             subject            = new TcpStreamFactory(settings);
            var             endPoint           = CoreTestConfiguration.ConnectionString.Hosts[0];

            var stream = await subject.CreateStreamAsync(endPoint, CancellationToken.None);

            var socketProperty = typeof(NetworkStream).GetProperty("Socket", BindingFlags.NonPublic | BindingFlags.Instance);
            var socket         = (Socket)socketProperty.GetValue(stream);
            var keepAlive      = (int)socket.GetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive);

            keepAlive.Should().Be(1);
        }
        public void CreateStream_should_throw_when_connect_timeout_has_expired(
            [Values(false, true)]
            bool async)
        {
            var settings = new TcpStreamSettings(connectTimeout: TimeSpan.FromMilliseconds(20));
            var subject  = new TcpStreamFactory(settings);
            var endPoint = new IPEndPoint(new IPAddress(0x01010101), 12345); // a non-existent host and port

            Action action;

            if (async)
            {
                action = () => subject.CreateStreamAsync(endPoint, CancellationToken.None).GetAwaiter().GetResult();;
            }
            else
            {
                action = () => subject.CreateStream(endPoint, CancellationToken.None);
            }

            action.ShouldThrow <TimeoutException>();
        }
        public void CreateStream_should_call_the_socketConfigurator(
            [Values(false, true)]
            bool async)
        {
            var             socketConfiguratorWasCalled = false;
            Action <Socket> socketConfigurator          = s => socketConfiguratorWasCalled = true;
            var             settings = new TcpStreamSettings(socketConfigurator: socketConfigurator);
            var             subject  = new TcpStreamFactory(settings);
            var             endPoint = CoreTestConfiguration.ConnectionString.Hosts[0];

            if (async)
            {
                subject.CreateStreamAsync(endPoint, CancellationToken.None).GetAwaiter().GetResult();
            }
            else
            {
                subject.CreateStream(endPoint, CancellationToken.None);
            }

            socketConfiguratorWasCalled.Should().BeTrue();
        }
 public TcpStreamFactory(TcpStreamSettings settings)
 {
     _settings = Ensure.IsNotNull(settings, nameof(settings));
 }
 // constructors
 public TcpStreamFactory()
 {
     _settings = new TcpStreamSettings();
 }
 public TcpStreamFactory(TcpStreamSettings settings)
 {
     _settings = Ensure.IsNotNull(settings, "settings");
 }
Exemple #13
0
 public StreamFactory(IStreamFactory innerFactory, TcpStreamSettings settings)
 {
     _innerFactory = innerFactory ?? throw new ArgumentNullException(nameof(innerFactory));
     _settings     = settings ?? new TcpStreamSettings();
 }