首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AF_UNIX套接字:我可以在进程之间传递套接字句柄吗?

AF_UNIX套接字:我可以在进程之间传递套接字句柄吗?
EN

Stack Overflow用户
提问于 2009-11-05 20:10:33
回答 2查看 1.6K关注 0票数 1

假设我创建了一个socketpair(),并将其中一个套接字的句柄传递给一个派生进程(popen),该进程能够与父进程进行通信吗?

我看到的示例是使用fork()应用的,这超出了我当前项目的范围。

更新:我尝试了一个简单的测试:

  1. Client:带套接字的socketpair
  2. 从客户端使用posix_spawn和套接字1作为命令行参数。
  3. 客户:write到套接字..。客户在没有任何警告的情况下退出..。

这种方法似乎有问题。

更新:我也找到了这个备注

Pipes and socketpairs are limited to communication between processes with a common ancestor.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-11-05 20:24:39

execve的手册页指出:

代码语言:javascript
复制
 File descriptors open in the calling process image remain open in the new
 process image, except for those for which the close-on-exec flag is set
 (see close(2) and fcntl(2)).  Descriptors that remain open are unaffected
 by execve().

因为像popen这样的函数是基于execve的,那么您从套接字对函数获得的文件描述符在两个进程中都应该很好,我不明白为什么不能以任何方式传递描述符。我假设在本例中,您意味着将其转换为字符串,并在STDIN上将其设置为子进程,这将将其转换回int以用作文件描述符。

这当然是值得为之编写一些试用代码的。

票数 2
EN

Stack Overflow用户

发布于 2009-11-06 13:25:06

是的,您可以将它传递给子进程。真正的诀窍是,套接字()给您提供一对连接的套接字--确保子节点保存其中一个,而父节点保存另一个套接字(父节点应该关闭孩子的套接字,反之亦然)。

不过,大多数情况下使用一对管道。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1683246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档