【问题标题】:Can I open a socket and pass it to another process in Linux我可以打开一个套接字并将其传递给 Linux 中的另一个进程吗
【发布时间】:2011-01-01 03:24:40
【问题描述】:

在 Linux 中,我可以打开一个套接字并将该套接字传递给另一个进程吗? 如果是,您能告诉我在哪里可以找到示例吗?

谢谢。

【问题讨论】:

标签: linux sockets


【解决方案1】:

是的,您可以使用 sendmsg() 和 SCM_RIGHTS 从一个进程到另一个进程:

SCM_RIGHTS - 发送或接收一组 从另一个打开文件描述符 过程。数据部分包含一个 文件描述符的整数数组。 传递的文件描述符表现为 尽管它们是用 dup(2).

http://linux.die.net/man/7/unix

但这不是典型的用法。更常见的是当进程从其父进程继承套接字时(在fork() 之后)。子进程可以使用任何未关闭的文件句柄(包括套接字)。所以子进程继承父进程的套接字。

侦听连接的服务器进程称为守护进程。这通常会在每个新连接上分叉,产生一个处理每个新请求的进程。典型守护进程的示例如下:

http://www.steve.org.uk/Reference/Unix/faq_8.html#SEC88

向下滚动到无效process()

【讨论】:

  • 除非您不想为每个请求都派生一个新进程,而只是将请求传递给一组工作人员。
  • 这看起来特定于 AF_UNIX。可以对 TCP 套接字执行此操作吗?
  • @AdrianRatnapala:不,您不能通过 TCP 将套接字(或文件句柄)发送到另一台机器,它们必须位于同一个内核中。所以你通信的通道必须是AF_UNIX,但你传输的文件句柄当然可以是TCP套接字。
  • @Zarat,好的,很好,你自然不能跨机器发送它们。我不知何故想到只能传输 AF_UNIX 套接字。愚蠢的我 - 手册页实际上非常清楚。
  • 如果两个进程也都从套接字读取会发生什么?
猜你喜欢
  • 1970-01-01
  • 2011-05-20
  • 1970-01-01
  • 2012-08-30
  • 1970-01-01
  • 1970-01-01
  • 2010-12-27
  • 1970-01-01
  • 2015-12-14
相关资源
最近更新 更多