24-传递文件描述符
61.13.3 传递文件描述符
通过 sendmsg()和recvmsg(),我们可在同一台主机上通过 UNIX 域套接字将包含文件描述符的辅助数据从一个进程传递到另一个进程上。以这种方式可以传递任意类型的文件描述符——比如,从 open()或pipe()返回得到的文件描述符。一个同套接字更相关的例子是:主服务器可以在 TCP 监听套接字上接受客户端连接,然后将返回的文件描述符传递给进程池中的其中一个成员上(见 60.4 节),这些成员由服务器的子进程组成。之后,子进程就可以响应客户端的请求了。
虽然这种技术通常称为传递文件描述符,但实际上在两个进程间传递的是对同一个打开文件描述的引用(见图5-2)。在接收进程中使用的文件描述符号一般和发送进程中采用的文件描述符号不同。
随本书发布的源码中,子目录sockets中的scm_rights_send.c和scm_rights_recv.c文件中给出了传递文件描述符的例子。