c-所以socketpair()生成的套接字可以在不同的进程中使用



正如我们所知,fd(文件描述符,确切地说是int)是每个进程的,也就是说,在不同进程中打开的同一个文件可能具有不同的fd

我认为插座也应该如此。

但当阅读nginx源代码时,我发现它使用套接字在进程之间进行通信:

    if (socketpair(AF_UNIX, SOCK_STREAM, 0, ngx_processes[s].channel) == -1)
    {
        ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
                      "socketpair() failed while spawning "%s"", name);
        return NGX_INVALID_PID;
    }

这里ngx_processes[s].channel[0]被发送到其他进程。

但正如我所说的fd是每个进程的,它如何确保相同的int指向相同的套接字?

更新

为什么现在的问题是这是如何工作的(这和nginx使用的方式相同)?

http://swtch.com/usr/local/plan9/src/lib9/sendfd.c

nginx使用unix域套接字辅助消息(特别是SCM_RIGHTS消息,有关此方面的更多信息,请参阅unix协议的手册页)来传递文件描述符。

当您收到SCM_RIGHTS消息时,内核基本上会给您一个重复的(如dup中的)文件描述符,在接收过程中有效。这个fd可能有也可能没有相同的数字,这无关紧要,因为接收方应该使用消息的内容,而不是一些先验知识。

相关内容

  • 没有找到相关文章

最新更新