public int read() throws IOException {try {beginRead();return super.read();} catch (InterruptedIOException e) {throw readTimedOut(e);} finally {endRead();}}
public override int Read(){try{BeginRead();return base.Read();}catch (ThreadInterruptedException){throw ReadTimedOut();}finally{EndRead();}}