Some general notes about the code:
This is intentional in the design. You could modify this to add MT_NO_WAITERS and MT_NO_SPACE messages, respectively, which can be returned whenever these errors were detected.
Note that the example above shows just one way of implementing timeouts for clients. Later in this chapter (in Kernel timeouts), we'll talk about kernel timeouts, which are another way of implementing almost the exact same thing, except that it's driven by the client, rather than a timer.