那么由 socketpair() 生成的套接字可以在不同的进程中使用吗?

发布于 2024-11-11 17:09:42 字数 774 浏览 0 评论 0原文

我们知道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

As we know fd(file descriptor,an int to be exact) is per process,that is,the same file opened in different processes may have different fd.

And I thought so should be for sockets.

But when reading nginx source code I found it's using sockets to communicate between processes:

    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;
    }

Here ngx_processes[s].channel[0] is sent to other process.

But as I said fd is per process,how can it ensure that the same int will point to the same socket?

UPDATE

Why question is now how this works(it's the same way that nginx uses)?

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

未央 2024-11-18 17:09:42

nginx 使用 unix 域套接字辅助消息(具体来说,SCM_RIGHTS 消息,请参阅 UNIX 协议的手册页 了解更多信息)来传递文件描述符。

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

nginx uses unix domain sockets ancillary messages (specifically, the SCM_RIGHTS message, see the man page for the unix protocol for more information on this) to pass file descriptors around.

When you receive an SCM_RIGHTS message, the kernel basically gives you a duplicate (as in dup) file descriptor, valid in the receiving process. This fd may or may not have the same number, which matters very little as the receiving side should use the contents of the message and not some prior knowledge.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文