如何将C ++ / CLI .Net套接字转换为boost :: asio套接字?

时间:2011-09-09 12:36:54

标签: .net c++ sockets boost c++-cli

我想要的是简单的 - 从C ++ / CLI .Net socket创建新的boost asio套接字的代码示例。如何创造这样的东西?

以下是我想要做的伪代码:

.net::socket a;
boost::asio::socket b;
b.assign(a.nativeWin32Socket());

2 个答案:

答案 0 :(得分:4)

你试过吗?

b.assign(a.Handle.ToInt32());

另请注意,您需要使用WSADuplicateSocket,因为您可能会得到b和a将关闭套接字并指出您不期望的内容。

所以你需要这样的东西:

 SOCKET native = WSADuplicateSocket(a.Handle.ToInt32(),...);
 b.assign(native);

完整答案(已测试)

SOCKET native = a->Handle.ToInt32();
// Now native is a real socket
b.assign(boost::asio::ip::tcp::v4(), native);

现在最好使用WSADuplicateSocket复制套接字:

答案 1 :(得分:2)

您可以使用assign将本地套接字分配给Boost asio套接字。请参阅How to create a Boost.Asio socket from a native socket的接受答案。