[zeromq-dev] 0MQ, Boost.Asio, and Windows

Damien Kick dkick at shoretel.com
Fri Aug 9 23:44:39 CEST 2013


I have been following the excellent advice on using 0MQ and Boost.Asio
on a POSIX-ish platform (MacOS) at
<http://preview.tinyurl.com/jw4krek>.  Unfortunately, though, I am
writing code which needs to work on both POSIX-ish and Windows.  I'm
not having much luck, so far, with my attempts to translate this
advice to the Windows side.  I can't seem to figure out how to match
the type returned by getsockopt(ZMQ_FD) on Windows and what I think
should be the Windows equivalents of
boost::asio::posix::stream_descriptor.  Here is what I've tried:


    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);

And the error I get when I try to compile it.

    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

So far, my Google-fu has been weak; I can only seem to find examples
which deal with Boost.Asio and 0MQ on POSIX-ish.  I'm not sure what I
need to do to correctly get from a SOCKET to a `void * const`.  The
closest advice that I've been able to find is about combining 0MQ and
libcurl: <http://preview.tinyurl.com/lbffx64>.  And this advice also
makes me nervous that my compilation problems are only the tip of a
much nastier iceberg hiding under the surface.  In particular,

> The reason why there is a assign, but no release-function for
> boost::asio::ip::tcp::sockets is that once a socket is "bound" to a
> completion port you cannot "unbound" it or "bound" it to another
> completion-port.

And so I'm worried there might be other gotchas about which I might
not know and which would not even be so polite as to manifest
themselves as compile-time errors.  Thank you in advance for any help.


________________________________

This e-mail and any attachments are confidential. If it is not intended for you, please notify the sender, and please erase and ignore the contents.



More information about the zeromq-dev mailing list