Я борюсь с двумя ошибками с Boost.Asio.
Первый возникает, когда я пытаюсь получить данные в сокете:
char reply[1024];
boost::system::error_code error;
size_t reply_length = s.receive(boost::asio::buffer(reply, 1024), 0, error);
if (error) cout << error.message() << endl; //outputs "End of file"
Второй возникает, когда я пытаюсь создать ip::tcp::socket из (действительного!) родного сокета:
boost::asio::io_service ioserv;
boost::asio::ip::tcp::socket s(ioserv);
boost::system::error_code error;
s.assign(boost::asio::ip::tcp::v4(), nativeSocket, error);
if (error) cout << error.message() << endl; //outputs "The parameter is incorrect"
Со всеми этими проблемами и отсутствием документации, к которой можно было бы обратиться, у меня возникает соблазн вернуться к сокетам BSD, но у меня там свои проблемы ... так что, если кто-нибудь может помочь, я был бы очень признателен.
РЕДАКТИРОВАТЬ: Что касается номера 2, то nativeSocket объявляется следующим образом:
SOCKET nativeSocket = INVALID_SOCKET;
nativeSocket = accept(svr_sock, (struct sockaddr*)&sin, &size);
После этого с сокетом выполняются некоторые другие действия, а именно: он устанавливается как неблокирующий с помощью ioctlsocket и с помощью setsockopt для SO_LINGER и SO_OOBINLINE.
boost::system::error_code()
перед вызовомassign()
? - person Éric Malenfant   schedule 11.11.2009