将套接字句柄从.NET传递到非托管子进程

em7*_*m70 6 .net c# sockets winsock

我目前有一个.NET程序启动与服务器的连接并启动另一个非托管可执行文件.本机进程应该接管相同的套接字(在子进程终止之前,连接不必关闭!)并开始通过它与服务器进行通信.

上述程序在Windows上运行,但是我更喜欢不涉及P/Invoke for .NET部分的解决方案.作为旁注,从父母到子进程的通信不是问题所以我可以轻松地在两者之间共享数据.
此外,一旦我开始使用本机进程中的套接字,我不再需要在.NET进程中使用它,并且.NET进程在我使用非托管进程中的套接字之前终止,因此随之而来解决方案我需要知道如何处理.NET中的Socket对象,以便它的处理不会影响操作系统套接字及其可用性.

提前致谢!

Eug*_*its 4

.NET 2.0 及更高版本提供了方便的方法DuplicateAndClose

更新:看起来需要进行黑客攻击才能找出目标套接字存储在 SocketInformation.ProtocolInformation 中的位置(偏移量)。这可以通过捕获源进程中的字节数组,然后在另一个 .NET 进程中重新创建套接字并在那里获取套接字句柄(在第二个进程中)来完成。然后查看数据在字节数组中的位置。

还有一种很好的非托管方法来复制套接字,如下所述