コード例 #1
0
 private void ProcessAccept(SocketAsyncEventArgs e)
 {
     try
     {
         if (e.SocketError == SocketError.Success)
         {
             var acceptSocket = e.AcceptSocket;
             e.AcceptSocket = null;
             OnSocketAccepted(acceptSocket);
         }
         else
         {
             SocketUtils.ShutdownSocket(e.AcceptSocket);
             e.AcceptSocket = null;
         }
     }
     catch (ObjectDisposedException) { }
     catch (Exception ex)
     {
         _logger.Error("Process socket accept has exception.", ex);
     }
     finally
     {
         StartAccepting();
     }
 }
コード例 #2
0
ファイル: TcpConnection.cs プロジェクト: zszqwe/CommonX
        private void CloseInternal(SocketError socketError, string reason, Exception exception)
        {
            if (Interlocked.CompareExchange(ref _closing, 1, 0) == 0)
            {
                try
                {
                    if (_receiveSocketArgs.Buffer != null)
                    {
                        _receiveDataBufferPool.Return(_receiveSocketArgs.Buffer);
                    }
                }
                catch (Exception ex)
                {
                    _logger.Error("Return receiving socket event buffer failed.", ex);
                }

                Helper.EatException(() =>
                {
                    if (_sendSocketArgs != null)
                    {
                        _sendSocketArgs.Completed   -= OnSendAsyncCompleted;
                        _sendSocketArgs.AcceptSocket = null;
                        _sendSocketArgs.Dispose();
                    }
                    if (_receiveSocketArgs != null)
                    {
                        _receiveSocketArgs.Completed   -= OnReceiveAsyncCompleted;
                        _receiveSocketArgs.AcceptSocket = null;
                        _receiveSocketArgs.Dispose();
                    }
                });

                SocketUtils.ShutdownSocket(_socket);
                var isDisposedException = exception != null && exception is ObjectDisposedException;
                if (!isDisposedException)
                {
                    _logger.InfoFormat("Socket closed, remote endpoint:{0}, socketError:{1}, reason:{2}, ex:{3}", RemotingEndPoint, socketError, reason, exception);
                }
                _socket = null;

                if (_connectionClosedHandler != null)
                {
                    try
                    {
                        _connectionClosedHandler(this, socketError);
                    }
                    catch (Exception ex)
                    {
                        _logger.Error("Call connection closed handler failed.", ex);
                    }
                }
            }
        }
コード例 #3
0
ファイル: ClientSocket.cs プロジェクト: zszqwe/CommonX
 public ClientSocket Shutdown()
 {
     if (_connection != null)
     {
         _connection.Close();
         _connection = null;
     }
     else
     {
         SocketUtils.ShutdownSocket(_socket);
         _socket = null;
     }
     return(this);
 }
コード例 #4
0
        public void Start()
        {
            _logger.InfoFormat("Socket server is starting, listening on TCP endpoint: {0}.", _listeningEndPoint);

            try
            {
                _socket.Bind(_listeningEndPoint);
                _socket.Listen(5000);
            }
            catch (Exception ex)
            {
                _logger.Error(string.Format("Failed to listen on TCP endpoint: {0}.", _listeningEndPoint), ex);
                SocketUtils.ShutdownSocket(_socket);
                throw;
            }

            StartAccepting();
        }
コード例 #5
0
ファイル: ClientSocket.cs プロジェクト: zszqwe/CommonX
        private void ProcessConnect(SocketAsyncEventArgs e)
        {
            e.Completed     -= OnConnectAsyncCompleted;
            e.AcceptSocket   = null;
            e.RemoteEndPoint = null;
            e.Dispose();

            if (e.SocketError != SocketError.Success)
            {
                SocketUtils.ShutdownSocket(_socket);
                _logger.ErrorFormat("Socket connect failed, remoting server endpoint:{0}, socketError:{1}", _serverEndPoint, e.SocketError);
                OnConnectionFailed(_serverEndPoint, e.SocketError);
                _waitConnectHandle.Set();
                return;
            }

            _connection = new TcpConnection(_socket, _setting, _receiveDataBufferPool, OnMessageArrived, OnConnectionClosed);

            _logger.InfoFormat("Socket connected, remote endpoint:{0}, local endpoint:{1}", _connection.RemotingEndPoint, _connection.LocalEndPoint);

            OnConnectionEstablished(_connection);

            _waitConnectHandle.Set();
        }
コード例 #6
0
 public void Shutdown()
 {
     SocketUtils.ShutdownSocket(_socket);
     _logger.InfoFormat("Socket server shutdown, listening TCP endpoint: {0}.", _listeningEndPoint);
 }