进程之间的套接字传递

Posted

技术标签:

【中文标题】进程之间的套接字传递【英文标题】:socket passing between processes 【发布时间】:2009-03-02 18:07:37 【问题描述】:

有没有办法在 Windows 中的进程之间传递套接字(地址空间不同)?

我发现此信息Shared Sockets,因此相信这是可能的。

"引入 WSADuplicateSocket 函数以实现跨进程的套接字共享"...

更多信息:在 Apache 的源代码 (httpd-2.2.11-win32-src.zip) 中使用了 api WSADuplicateSocket 和 cmets。

[编辑] 最近我发现了这个关于这个问题的很好的样本。How duplication is done in the unmanaged world - Socket Duplication - Part 1Is it possible to transfer sockets from unmanaged processes? - Socket Duplication - Part 2

【问题讨论】:

您可以使用命名管道来重定向来自多个客户端进程的 i/o。不是共享套接字,但非常简单。 msdn.microsoft.com/en-us/library/aa365590(VS.85).aspx 【参考方案1】:

请参阅WSADuplicateSocket 的备注部分。它实际上表明您可以使用您最喜欢的进程间通信方案将 WSAPROTOCOL_INFO 结构(它只是数据!)发送到目标。

有很多 IPC 方案。我可能会使用Boost::interprocess 的共享内存。但是,如果目标具有窗口 + 消息循环,则可以使用 SendMessage。或者剪贴板 API,就此而言(虽然有些奇怪)。机制由您选择。

【讨论】:

【参考方案2】:

如果您正在创建子进程,那么有些事情可能会为您完成。见

http://www.tangentsoft.net/wskfaq/articles/passing-sockets.html (我知道这个在古代有效;不知道它是否适用于当前版本)

http://msdn.microsoft.com/en-us/library/ms682499.aspx

-- MarkusQ

【讨论】:

以上是关于进程之间的套接字传递的主要内容,如果未能解决你的问题,请参考以下文章

python 使用Python的多处理库在进程之间传递套接字的示例

在不相关的进程之间复制 Windows 套接字

传输层概述

分叉和传递套接字c ++

进程间的通信简单总结

基于JAVA套接字的简单网络聊天程序