Posted to tcl by colin at Tue Oct 26 21:13:20 GMT 2010view raw
- # Basic I/O
- method read {mychan n} {
- set used [clock milliseconds]
- if {[catch {::chan read $chan $n} result eo]} {
- Debug.error {$mychan read $chan $n -> error $result ($eo)}
- } else {
- Debug.chan {$mychan read $chan $n -> [string length $result] bytes: [string map {\n \\n} "[string length $result] bytes '[string range $result 0 20]...[string range $result end-20 end]"]'}
- Debug.chan {$mychan read $chan eof = [chan eof $chan]}
- Debug.chan {$mychan read $chan blocked = [chan blocked $chan]}
- Debug.chan {$chan configured: ([chan configure $chan])}
- # ![chan configure $chan -blocking] - optimization -> save the
- # -blocking information in a flag, as it passes through method
- # 'blocking'.
- set gone [catch {chan eof $socket} eof]
- if {![string length $result] &&
- !$gone && !$eof &&
- ![chan configure $chan -blocking]
- } {
- return -code error EAGAIN
- }
- }
- return $result
- }