I have found what appears to be a bug in ASIO. From boost/asio/detail/socket_select_interrupter.hpp, starting on line 53: sockaddr_in4_type addr; socket_addr_len_type addr_len = sizeof(addr); addr.sin_family = AF_INET; addr.sin_addr.s_addr = inet_addr("127.0.0.1"); addr.sin_port = 0; if (socket_ops::bind(acceptor.get(), (const socket_addr_type*)&addr, addr_len, ec) == socket_error_retval) { boost::system::system_error e(ec, "socket_select_interrupter"); boost::throw_exception(e); } addr needs to be cleared before it is used. The failure to do this caused the bind call to fail for me on VxWorks 6.4. I inserted the following line right after the delcaration of addr: bzero((char *)&addr, sizeof(sockaddr_in4_type)); This solved the problem for me. -- /************************************** * Scott Finley * Research Software Engineer * TomoTherapy Inc. * Email: sfinley@tomotherapy.com * Phone: 608.824.3381 ***/
Scott Finley writes:
I have found what appears to be a bug in ASIO. From boost/asio/detail/socket_select_interrupter.hpp, starting on line 53:
sockaddr_in4_type addr; socket_addr_len_type addr_len = sizeof(addr); addr.sin_family = AF_INET; addr.sin_addr.s_addr = inet_addr("127.0.0.1"); addr.sin_port = 0; if (socket_ops::bind(acceptor.get(), (const socket_addr_type*)&addr, addr_len, ec) == socket_error_retval) { boost::system::system_error e(ec, "socket_select_interrupter"); boost::throw_exception(e); }
addr needs to be cleared before it is used. The failure to do this caused the bind call to fail for me on VxWorks 6.4.
I know nothing at all about VxWorks so please excuse my ignorance. Does VxWorks have a POSIX programming interface or is it based on Win32? The socket_select_interrupter class is only intended for Win32. POSIX implementations are supposed to use pipe_select_interrupter instead. Cheers, Chris
participants (2)
-
Christopher Kohlhoff
-
Scott Finley