In the code sample above, notice how we:
rcvid = MsgReceive (...); ... MsgReply (rcvid, ...);
This is a key snippet of code, because it illustrates the binding between receiving a message from a client, and then being able to (sometime later) reply to that particular client. The receive ID is an integer that acts as a magic cookie that you'll need to hold onto if you want to interact with the client later. What if you lose it? It's gone. The client will not unblock from the MsgSend() until you (the server) die, or if the client has a timeout on the message-passing call (and even then it's tricky; see the TimerTimeout() function in the QNX Neutrino C Library Reference, and the discussion about its use in the Clocks, Timers, and Getting A Kick Every So Often chapter, under Kernel timeouts).
Also, note that except in one special case (the MsgDeliverEvent() function which we'll look at later), once you've done the MsgReply(), that particular receive ID ceases to have meaning.
This brings us to the MsgReply() function.