Esempio n. 1
0
        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();
        }
Esempio n. 2
0
        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();
            }
        }