client_stub( params ) let s be a link to the RPC server let b be my mailbox nobody else uses create reply-link, a new link pointing to box b restrict the reply-link so it can only be used once send (params, reply-link) to s receive (results) in box b return results RPC server let s be the mailbox referenced by client links let r be an otherwise unused entry in the server's link list repeat receive (params, r) in box s results = the-remote-procedure( params ) send (results) to r forever
Part B: The DEMOS multiwait primitive solves this. Prior to sending the call message to a timed rendezvous, requesting a reply in box A, the caller would also request the time server to send to box B after a delay of time T. Then, the caller would do a multiwait until a reply arrives in either box A or B. If the reply was in box A, the rendezvous was successful, while if the reply came to box B, the time limit expired first.
The different clock synchronization algorithms will differ in maximum error they allow; that is, if you read the time on any two individual clocks, they may differ, and the maximum difference depends on how frequently each clock is reset to an estimate of the average for all n clocks, and the maximum difference depends on how the average for all n clocks is estimated.