Poderosa.PortForwarding.Channel.OnSocketData C# (CSharp) Method

OnSocketData() private method

private OnSocketData ( IAsyncResult result ) : void
result IAsyncResult
return void
        private void OnSocketData(IAsyncResult result)
        {
            try {
                int len = _socket.EndReceive(result);
                if (!_channelReady.WaitOne(3000, false))
                    throw new IOException("channel ready timed out");

                //Debug.WriteLine(String.Format("OnSocketData ch={0} len={1}", _channel.LocalChannelID, len));
                if (len <= 0) {
                    _socket.ShutdownReceive();
                    _channel.SendEOF();
                    _channel.Close();
                }
                else {
                    _channel.Transmit(_buffer, 0, len);
                    _socket.BeginReceive(_buffer, 0, _buffer.Length, SocketFlags.None, new AsyncCallback(this.OnSocketData), null);
                }
            }
            catch (Exception ex) {
                Debug.WriteLine("OnSocketData catch handler" + _channel.LocalChannelID);
                Debug.WriteLine(ex.Message);
                Debug.WriteLine(ex.StackTrace);
                try {
                    _channel.Close();
                }
                catch (Exception ex2) {
                    Debug.WriteLine("Channel Close Error");
                    Debug.WriteLine(ex2.Message);
                    Debug.WriteLine(ex2.StackTrace);
                }

                try {
                    _socket.Close();
                }
                catch (Exception ex2) {
                    Debug.WriteLine("Socket Close Error");
                    Debug.WriteLine(ex2.Message);
                    Debug.WriteLine(ex2.StackTrace);
                }
            }
        }