Doors are a fast light-weight RPC mechanism for secure control transfer between processes on the same machine. A door is created when a process known as the door server calls door_create()(3DOOR) with a server function and receives a file descriptor. The file descriptor can be passed to other processes or attached to the file system using fattach(). A client process, which has the file descriptor, can then invoke the door process by calling door_call(). The client can also pass data and descriptors including other door descriptors. As a result of the call to door_call(), the client thread blocks and a thread in the door server wakes up and starts running the server function. When the server function is completed, the function calls door_return() to pass optional data and descriptors back to the client. door_return() also switches control back to the client; the server thread gets blocked in the kernel and does not return from the door_return() call.
Doors are described in the doors library libdoor(3LIB).