我是新手,我一直在尝试使用boost :: asio。问题是我在设置一些选项时总是会遇到“错误文件描述符”错误/异常(我需要将其设置为非阻塞)。即使这样也失败了:
#include <boost/asio.hpp>
using boost::asio::ip::tcp;
int main( )
{
boost::asio::io_service io_service;
tcp::socket socket( io_service );
boost::asio::socket_base::non_blocking_io option(true);
socket.io_control( option );
return 0;
}
在运行期间弹出:
terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::system::system_error> >'
what(): Bad file descriptor
当我尝试过所有事情时,这真的令人沮丧。如果重要,操作系统是Linux x64。
答案 0 :(得分:7)
您调用了does not open socket
的套接字构造函数。您可以使用在调用socket
之前打开socket::io_control()
的其他重载之一,或明确打开socket
。
boost::asio::ip::tcp::socket socket(io_service);
socket.open(boost::asio::ip::tcp::v4());