Res.Core.TcpTransport.NetworkIO.TcpGateway.connect_raw C# (CSharp) Method

connect_raw() private method

private connect_raw ( ) : NetMQSocket
return NetMQSocket
        private NetMQSocket connect_raw()
        {
            if (_socket != null)
            {
                Log.Debug("[TcpGateway] Disposing old socket. Thread Id: {0}", Thread.CurrentThread.ManagedThreadId);
                _socket.ReceiveReady -= socket_ReceiveReady;
                _socket.Options.Linger = TimeSpan.FromSeconds(0);
                _socket.Dispose();
                _socket = null;
            }

            var spinner = new SpinWait();

            while (true)
            {
                Log.Info("[TcpGateway] Creating new socket. Thread Id: {0}", Thread.CurrentThread.ManagedThreadId);
                var socket = _ctx.CreateRouterSocket();
                socket.ReceiveReady += socket_ReceiveReady;

                try
                {
                    socket.Bind(_endpoint);
                    Log.Debug("[TcpGateway] Socket connected at {0}. Thread Id: {1}", _endpoint, Thread.CurrentThread.ManagedThreadId);
                    return socket;
                }
                catch (NetMQException e)
                {
                    Log.Warn("[TcpGateway] Error binding to socket at {0}. Retrying in 500ms... Thread ID: {1}", e, _endpoint, Thread.CurrentThread.ManagedThreadId);
                    socket.Options.Linger = TimeSpan.FromSeconds(0);
                    socket.Dispose();
                    Thread.Sleep(500);
                    spinner.SpinOnce();
                }
            }
        }