Ошибка неверного дескриптора файла при установке неблокирования на boost :: asio :: ip :: tcp :: socket - PullRequest
3 голосов
/ 23 февраля 2011

Я новичок в boost, и я пробовал boost :: asio.Проблема в том, что я всегда получаю ошибку / исключение «Bad File Descriptor» при установке некоторых параметров (мне нужно, чтобы это было неблокирующим).Даже здесь это терпит неудачу:

#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 Ответ

7 голосов
/ 23 февраля 2011

Вы вызвали конструктор сокета, который не открывает socket. Вы можете использовать одну из других перегрузок, которые открывают socket до вызова socket::io_control(), или открывают socket явно.

boost::asio::ip::tcp::socket socket(io_service);
socket.open(boost::asio::ip::tcp::v4());
...