
On Aug 11, 2013, at 4:32 PM, Damien Kick <dkick@shoretel.com<mailto:dkick@shoretel.com>> wrote: Yeah, so far I've been having very good luck with Asio and 0MQ on POSIX. But I'm still stuck on Windows :( The code that I was able to get to compile is not happy at runtime. int main() { 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::windows::stream_handle::native_handle_type zfd_native(&zfd); boost::asio::io_service ios; boost::asio::windows::stream_handle io(ios, zfd_native); } Stepping line-by-line in the debugger for Visual Studio 2010, when I get to the line attempting to create the windows::stream_handle, I get Unhandled exception at 0x77b815de in test-zee-zmq-socket.exe: Microsoft C++ exception: boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::system::system_error> > at memory location 0x00c1fc7c.. And so there obviously must be more to creating a windows::stream_handle than this but I'm still quite in the dark as to what that might be. The stack trace I'm getting doesn't help me much, either, but I am also am quite ignorant about most things Windows. ntdll.dll!77b815de() [Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll] ntdll.dll!77b815de() ntdll.dll!77b7014e() KernelBase.dll!7608c41f()
msvcr100d.dll!_nh_malloc_dbg_impl(unsigned int nSize=8, int nhFlag=0, int nBlockUse=1, const char * szFileName=0x00000000, int nLine=0, int * errno_tmp=0x00c1fb0c) Line 239 + 0x19 bytes C++ msvcr100d.dll!_nh_malloc_dbg(unsigned int nSize=8, int nhFlag=0, int nBlockUse=1, const char * szFileName=0x00000000, int nLine=0) Line 302 + 0x1d bytes C++ msvcr100d.dll!malloc(unsigned int nSize=12712804) Line 56 + 0x15 bytes C++ 00c1fb64() 00cc8220()
I've also tried int main() { 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, GetStdHandle(zfd)); } Which also compiles but then I'm still getting the same exception at runtime. And so apparently a SOCKET is not the same as a HANDLE (?), even though <http://msdn.microsoft.com/en-us/library/windows/desktop/ms741476(v=vs.85).aspx> tells me that The WPUCreateSocketHandle function creates a new socket handle. Syntax C++ SOCKET WPUCreateSocketHandle( _In_ DWORD dwCatalogEntryId, _In_ DWORD_PTR dwContext, _Out_ LPINT lpErrno ); <sigh/> It's so annoying because I have this feeling that there is probably just one stupid little conversion function that I need to be calling but it continues to elude me :( ________________________________ 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.