While reading intro(5) I noticed these very interesting lines:

Fids are chosen by
the client.  All requests on a connection share the same fid
space; when several clients share a connection, the agent
managing the sharing must arrange that no two clients choose
the same fid.
And later:
A client can send multiple T-messages without waiting for
the corresponding R-messages, but all outstanding T-messages
must specify different tags.  The server may delay the
response to a request and respond to later ones; this is
sometimes necessary, for example when the client reads from
a file that the server synthesizes from external events such
as keyboard characters.

This is a very interesting feature, allowing a sort of proxing at connection level.
Such a proxy could accept 9P connections on a socket and forward them to a remote server (after modifying fids and tags so that they are kept unique), largely improving scalability.
If available, I'd really like to read such code.

BTW, is there any client library that actually enables consumers to send multiple T-messages without waiting the corresponding R-messages and then consume responses when they arrive?

All the 9p implementations that I saw were synchronous, allowing only one client per connection.


Where can I find an implementation of these features?
I guess it would be a really instructive read.


Giacomo