public TcpConnection(Socket socket) { _client = new TcpSocket { Socket = socket ?? throw new ArgumentNullException(nameof(socket)) }; _stream = new NetworkStream(_client.Socket); ThreadPool.QueueUserWorkItem(SocketWrite, _stream); } ~TcpConnection() { Close(); }
public void Close() { if (_isClosed) { return; } _isClosed = true; _closeEvt.Set(); _stream.Close(1); if (_client.Socket != null && _client.Socket.Connected) { _client.Socket.Shutdown(SocketShutdown.Both); _client.Socket.Close(1); } _stream = null; _client = null; _initRead = false; _closeEvt.Reset(); lock (_closeLock) { _onClose?.Invoke(); } }