I have found that simply opening sockets , pipes or serial ports and "fconfigure -translation binary -blocking 0 -buffering none" and using event driven I/O in regular Tcl to be superior. You use this same pattern for all activity, which makes things more consistent.