Posted to tcl by Bradipo at Mon Jul 29 00:39:19 GMT 2024view pretty
proc readbytes {chan n b} { puts stdout "[clock format [clock seconds]]\ readbytes $chan $n [binary encode hex $b]" if {[string length $b] == 2} { fileevent $chan readable [list readmorebytes $chan $n $b] } else { if {[eof $chan]} { fileevent $chan readable {} catch {close $chan} puts stderr "short read readbytes" } else { append b [read $chan 1] fileevent $chan readable [list readbytes $chan $n $b] } } } proc readmorebytes {chan n b} { puts stdout "[clock format [clock seconds]]\ readmorebytes $chan $n [binary encode hex $b]" if {[string length $b] == $n} { fileevent $chan readable {} catch {close $chan} puts stdout "[clock format [clock seconds]]\ got $n bytes [binary encode hex $b]" } else { if {[eof $chan]} { fileevent $chan readable {} catch {close $chan} puts stderr "short read readmorebytes" } else { append b [read $chan 1] fileevent $chan readable [list readmorebytes $chan $n $b] } } } proc doreceive {} { set fd [open /dev/urandom rb] fconfigure $fd -translation binary -blocking 0 fileevent $fd readable [list readbytes $fd 8 ""] } proc receive {} { puts stdout "[clock format [clock seconds]] starting receive" doreceive puts stdout "[clock format [clock seconds]] rescheduling receive" after 10000 receive } receive ------------------------------------------------------------------------ Sun Jul 28 18:38:55 MDT 2024 starting receive Sun Jul 28 18:38:55 MDT 2024 rescheduling receive Sun Jul 28 18:38:55 MDT 2024 readbytes file4 8 Sun Jul 28 18:38:55 MDT 2024 readbytes file4 8 7c Sun Jul 28 18:38:55 MDT 2024 readbytes file4 8 7cef Sun Jul 28 18:38:55 MDT 2024 readmorebytes file4 8 7cef Sun Jul 28 18:38:55 MDT 2024 readmorebytes file4 8 7cef86 Sun Jul 28 18:38:55 MDT 2024 readmorebytes file4 8 7cef8663 Sun Jul 28 18:38:55 MDT 2024 readmorebytes file4 8 7cef8663a9 Sun Jul 28 18:38:55 MDT 2024 readmorebytes file4 8 7cef8663a9d8 Sun Jul 28 18:38:55 MDT 2024 readmorebytes file4 8 7cef8663a9d8bf Sun Jul 28 18:38:55 MDT 2024 readmorebytes file4 8 7cef8663a9d8bff5 Sun Jul 28 18:38:55 MDT 2024 got 8 bytes 7cef8663a9d8bff5