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(); } }
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); } } } }
public ClientSocket Shutdown() { if (_connection != null) { _connection.Close(); _connection = null; } else { SocketUtils.ShutdownSocket(_socket); _socket = null; } return(this); }
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(); }
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(); }
public void Shutdown() { SocketUtils.ShutdownSocket(_socket); _logger.InfoFormat("Socket server shutdown, listening TCP endpoint: {0}.", _listeningEndPoint); }