An endpoint is a general-purpose object used for IPC (inter-process communication) and may be used to send or receive messages, or transfer capabilities, between Tasks.
Endpoints use a rendezvous model, wherein one end of an operation calls “recv” and blocks until a sender is available, and the other end calls “send” and blocks until a receiver is available (or, alternatively, “call” and “reply” are used). Once a task is blocked on either end, the operation completes. All ABI registers are copied between the tasks, as well as any capabilities as defined by the IPC buffer semantics.
If there are multiple senders or receivers blocked on an endpoint, the task which has been blocked the longest is unblocked when the other end is available.