private void PipeRemoteReceiveLoop() { bool final_close = false; byte[] recv_buffer = new byte[RecvSize]; DateTime beforeReceive = DateTime.Now; while (!_closed) { try { int bytesRead = _remote.Receive(recv_buffer, RecvSize, 0); DateTime now = DateTime.Now; if (_remote != null && _remote.IsClose) { final_close = true; break; } if (_closed) { break; } ResetTimeout(TTL); if (bytesRead > 0) { _local.Send(recv_buffer, bytesRead, 0); if ((now - beforeReceive).TotalSeconds > 5) { _totalRecvSize = 0; _remote.BeginReceive(remoteRecvBuffer, RecvSize, 0, new AsyncCallback(PipeRemoteReceiveCallback), null); return; } else { beforeReceive = now; } } else { Close(); } } catch (Exception e) { Logging.LogUsefulException(e); final_close = true; break; } } if (final_close) { Close(); } }
private void PipeRemoteReceiveLoop() { bool final_close = false; byte[] recv_buffer = new byte[RecvSize]; while (!_closed) { try { int bytesRead = _remote.Receive(recv_buffer, RecvSize, 0); if (_remote != null && _remote.IsClose) { final_close = true; break; } if (_closed) { break; } ResetTimeout(TTL); if (bytesRead > 0) { _local.Send(recv_buffer, bytesRead, 0); } else { Close(); } } catch (Exception e) { Logging.LogUsefulException(e); final_close = true; break; } } if (final_close) { Close(); } }