|  | .TH SENDFD 3 | 
|  | .SH NAME | 
|  | sendfd, recvfd \- pass file descriptors along Unix domain sockets | 
|  | .SH SYNOPSIS | 
|  | .B | 
|  | #include <u.h> | 
|  | .PP | 
|  | .B | 
|  | #include <libc.h> | 
|  | .PP | 
|  | .B | 
|  | int	sendfd(int socket, int fd) | 
|  | .PP | 
|  | .B | 
|  | int	recvfd(int socket) | 
|  | .SH DESCRIPTION | 
|  | .I Recvfd | 
|  | and | 
|  | .I sendfd | 
|  | can be used to pass an open file descriptor over | 
|  | a Unix domain socket from one process to another. | 
|  | Since | 
|  | .IR pipe (3) | 
|  | is implemented with | 
|  | .IR socketpair (2) | 
|  | instead of | 
|  | .IR pipe (2), | 
|  | .I socket | 
|  | can be a file descriptor obtained from | 
|  | .IR pipe (3). | 
|  | .PP | 
|  | .I Sendfd | 
|  | sends the file descriptor | 
|  | .I fd | 
|  | along the socket to a process calling | 
|  | .I recvfd | 
|  | on the other end. | 
|  | .PP | 
|  | It is assumed that the two sides have coordinated | 
|  | and agreed to transfer a file descriptor already, so | 
|  | that the | 
|  | .I sendfd | 
|  | is met with a | 
|  | .I recvfd | 
|  | instead of an ordinary | 
|  | .IR read . | 
|  | .PP | 
|  | The file descriptor number may change on its way | 
|  | between processes, but the kernel structure it represents | 
|  | will not. | 
|  | .SH SOURCE | 
|  | .B \*9/src/lib9/sendfd.c | 
|  | .SH SEE ALSO | 
|  | .IR socketpair (2), | 
|  | .I sendmsg | 
|  | in | 
|  | .IR send (2) |