Posted to tcl by schelte at Sat Jun 25 13:41:00 GMT 2011view raw

  1. proc coread {sock lenght} {
  2. set rc ""
  3. chan event $sock readable [info coroutine]
  4. while {[string length $rc] < $length} {
  5. if {[eof $sock]} {# do something}
  6. yield
  7. append rc [read $sock [expr {$lenght - [string length $rc]]
  8. }
  9. chan event $sock readable {}
  10. return $rc
  11. }