> Why was I puzzled: because as a non Plan9 user / developer, I > usually think of the underlaying transport technology (be it sockets > or 9p) as a stream of bytes without explicit framing.
As I understand, 9P itself is designed to operate on top of a message-oriented transport; however, it has everything required to run over a stream, esp. message length at beginning of every message. Framing is done by the library: the read9pmsg routine performs as many reads as necessary to return a complete 9P message to the caller.
