简体   繁体   English

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

[英]how to turn C++/CLI .Net socket into boost::asio socket?

What I want is simple - code sample of creating new boost asio socket from C++/CLI .Net socket. 我想要的是简单的 - 从C ++ / CLI .Net socket创建新的boost asio套接字的代码示例。 How to create such thing? 怎么创造这样的东西?

Here is pseudo code of what I would like to do: 这是我想做的伪代码:

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

Have you tried? 你有没有尝试过?

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

Also note they you will need to use WSADuplicateSocket as you may get that both b and a will close the socket and point you don't expect. 还要注意它们你需要使用WSADuplicateSocket,因为你可能会得到b和a将关闭套接字并指向你不期望的。

So you need something like: 所以你需要这样的东西:

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

Full Answer (Tested) 完整答案(经过测试)

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

Now it is good idea to duplicate the socket using WSADuplicateSocket: 现在最好使用WSADuplicateSocket复制套接字:

You can use assign to assign a native socket to a Boost asio socket. 您可以使用assign将本机套接字分配给Boost asio套接字。 See the accepted answer to How to create a Boost.Asio socket from a native socket . 请参阅如何从本机套接字创建Boost.Asio套接字的已接受答案。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM