Frames held per peer between pulls. Past this the oldest are dropped and
counted — an unbounded queue behind a host that stopped pulling is a
memory leak in someone else's app.
Serves one exchange: apply the incoming frame, if any, and drain that
peer's queue. Public because it is the transport — a host that reaches
the app some other way (an embedder, a test) drives this directly instead
of going through the service extension.