在boost :: asio :: ip :: tcp :: socket上设置非阻塞时出现错误文件描述符错误

时间:2011-02-22 23:09:22

标签: c++ boost boost-asio

我是新手,我一直在尝试使用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。

1 个答案:

答案 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());