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

Rel*_*lla 5 .net c++ sockets boost c++-cli

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

这是我想做的伪代码:

.net::socket a;
boost::asio::socket b;
a.assign(b.nativeWin32Socket());
Run Code Online (Sandbox Code Playgroud)

顺便说一句:以下是如何将C++/CLI .Net套接字转换为boost :: asio套接字.

Col*_*nee 8

你不能'分离'Boost.ASIO套接字.您可以使用native_handle()成员函数SOCKET从asio::socket对象获取句柄,但必须确保在完成asio::socket对象之后不会破坏对象SOCKET.它继续拥有本机的所有权,SOCKET并在调用析构函数时将其关闭.

像André建议的那样,你可以复制套接字句柄.但是,我不会考虑复制此套接字安全,因为Boost.ASIO会自动将本机SOCKET句柄与I/O完成端口相关联.如果.NET Socket包装器或某些其他代码尝试将重复的套接字与不同的I/O完成端口关联,则会发生错误.我知道.NET 2.0 Socket类实际上将SOCKET句柄与用于异步操作的I/O完成端口相关联.但是,这可能在更新版本中已更改.

  • 或者使用[`WSADuplicateSocket`](http://msdn.microsoft.com/en-us/library/ms741565(v = VS.85).aspx),然后当Boost关闭句柄时没关系,你有同一个套接字的独立句柄,使其保持打开状态.(假设Boost调用`closesocket`而不是`shutdown`) (2认同)