我可以打开一个套接字并将其传递给Linux中的另一个进程

n17*_*911 45 sockets linux

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

谢谢.

jsp*_*cal 60

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

SCM_RIGHTS - 从另一个进程发送或接收一组打开的文件描述符.数据部分包含文件描述符的整数数组.传递的文件描述符的行为就像创建它们一样 dup(2).

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

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

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

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

向下滚动到无效process().

  • 除非你不想为每个请求分叉一个新进程,只是将请求传递给一组worker. (17认同)
  • @AdrianRatnapala:不,你不能通过TCP将套接字(或文件句柄)发送到另一台机器,它们必须保持在同一个内核中.因此,您通信的通道必须是AF_UNIX,但您传输的文件句柄当然可以是TCP套接字. (10认同)
  • @Zarat,好的,很好,您自然不能跨计算机发送它们。我不知何故只能传送AF_UNIX套接字。我很傻-手册页实际上非常清晰。 (2认同)