进程之间的套接字传递
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
【讨论】:
以上是关于进程之间的套接字传递的主要内容,如果未能解决你的问题,请参考以下文章