0MQ、Boost.Asio和Windows

0MQ、Boost.Asio和Windows,windows,boost-asio,zeromq,Windows,Boost Asio,Zeromq,我一直在遵循关于在POSIX ish平台(MacOS)上使用0MQ和Boost.Asio的极好建议。但不幸的是,我正在编写的代码需要在POSIX ish和Windows上工作。到目前为止,我没有太多的运气尝试将这个建议翻译到Windows端。我似乎不知道如何匹配Windows上getsockopt(ZMQ_FD)返回的类型,以及我认为应该是boost::asio::posix::stream_描述符的Windows等价物。以下是我尝试过的: zmq::context_t zenv(1); zmq

我一直在遵循关于在POSIX ish平台(MacOS)上使用0MQ和Boost.Asio的极好建议。但不幸的是,我正在编写的代码需要在POSIX ish和Windows上工作。到目前为止,我没有太多的运气尝试将这个建议翻译到Windows端。我似乎不知道如何匹配Windows上getsockopt(ZMQ_FD)返回的类型,以及我认为应该是boost::asio::posix::stream_描述符的Windows等价物。以下是我尝试过的:

zmq::context_t zenv(1);
zmq::socket_t zocket(zenv, ZMQ_PUSH);
SOCKET zfd;
std::size_t zfd_size = sizeof(zfd);
zocket.getsockopt(ZMQ_FD, &zfd, &zfd_size);
boost::asio::io_service ios;
boost::asio::windows::stream_handle io(ios, zfd);
以及我试图编译它时遇到的错误

2>Z:\zee-zmq-socket.cpp(14): error C2664: 'boost::asio::windows::basic_stream_handle<>::basic_stream_handle(boost::asio::io_service &,void *const &)' : cannot convert parameter 2 from 'SOCKET' to 'void *const &'
2>          Reason: cannot convert from 'SOCKET' to 'void *const '
2>          Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
2>Z:\zee zmq socket.cpp(14):错误C2664:'boost::asio::windows::basic_stream_handle::basic_stream_handle(boost::asio::io_service&,void*const&'):无法将参数2从'socket'转换为'void*const&'
2> 原因:无法从“套接字”转换为“void*const”
2> 从整型转换为指针型需要重新解释转换、C型转换或函数型转换
到目前为止,我的谷歌富一直很弱;我似乎只能在POSIX ish上找到处理Boost.Asio和0MQ的示例。我不确定需要做什么才能正确地从套接字获取到
void*const
。我能找到的最贴切的建议是关于结合0MQ和libcurl:。这个建议也让我感到紧张,因为我的编译问题只是隐藏在表面之下的更糟糕的冰山一角。特别是,

有分配但没有释放功能的原因 boost::asio::ip::tcp::sockets是指一旦套接字“绑定”到完成 端口您不能将其“解除绑定”或“绑定”到另一个完成端口

所以我担心可能还有其他一些我可能不知道的问题,这些问题甚至不礼貌地表现为编译时错误。提前感谢您的帮助