Как Boost ASIO receive_from возвращает ошибки основного сокета? - PullRequest
0 голосов
/ 10 октября 2010

т.е. вернет ли блокирующая версия -1 в случае ошибки.

Или, если говорить более конкретно, как вы узнали, что вызов не удался? делает

boost :: asio :: ip :: udp :: socket :: receive_from () возвращает -1 при ошибке

Обычный вызов BS_ API API socket_from при ошибках возвращает -1, и вы можете посмотреть errno для конкретного кода ошибки. Буст-версия делает то же самое?

Хорошо, я попытался передать перегрузку так:

while(true){
    boost::system::error_code ec;
    size_t length = socket_.receive_from(
        boost::asio::buffer(buffer, buffer_size), 
        sender_endpoint, ec);

    /// ... other code
}

Но я получаю эту ошибку при компиляции:

error: no matching function for call to ‘boost::asio::basic_datagram_socket<boost::asio::ipdp, boost::asio::datagram_socket_service<boost::asio::ip::udp> >::receive_from(boost::asio::mutable_buffer, boost::asio::ip::basic_endpoint<boost::asio::ip::udp>&, boost::system::error_code&)’
make: *** [server.o] Error 1

Документация неправильная или я что-то не так делаю? РЕДАКТИРОВАТЬ: нет, я ошибаюсь ... извините, у меня есть момент ... это называется переутомление! Я сейчас полусонный. Мне не хватает аргумента флагов.

1 Ответ

1 голос
/ 10 октября 2010

При возникновении ошибки генерируется исключение boost :: system :: system_error . Перегрузка принимает параметр, если вы не хотите обрабатывать исключение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...