Boost Asio. Асинхронный прием на udp::socket
От: Аноним  
Дата: 30.01.13 10:25
Оценка:
Добрый день.
Начинаю осваивать boost::asio.
Я асинхронно принимаю udp пакеты через ip::udp::socket::async_receive_from(...). У меня возник вопрос как узнать размер принятой дейтаграммы? В классе ip::udp::socket не нашел метода, возвращающего это значение, то ли я плохо искал, то ли данный параметр в находится в предке, то ли это делается как-то по-другому.

Заранее благодарю за ответы.
boost asio udp socket datagram bytes_recv
Re: Boost Asio. Асинхронный прием на udp::socket
От: roman_dev  
Дата: 30.01.13 10:42
Оценка:
Забыл залогиниться.
Хочу скорректировать вопрос. Вроде как понял как получить количество принимаемых байт: перед вызовом функции acync_recv_from нужно вызвать функцию available().
Но возник вопрос: функцию available() нужно вызвать, когда придет дейтаграмма, в QT для этого есть сигнал readyRead, каким образом осуществляется синхронизация с моментом приема пакета в буст?
Re[2]: Boost Asio. Асинхронный прием на udp::socket
От: savitar  
Дата: 30.01.13 10:59
Оценка:
Здравствуйте, roman_dev, Вы писали:

void handler(
  const boost::system::error_code& error, // Result of operation.
  std::size_t bytes_transferred           // Number of bytes received.
);
Re[3]: Boost Asio. Асинхронный прием на udp::socket
От: roman_dev  
Дата: 30.01.13 11:33
Оценка:
Здравствуйте, savitar, Вы писали:

S>Здравствуйте, roman_dev, Вы писали:


S>
S>void handler(
S>  const boost::system::error_code& error, // Result of operation.
S>  std::size_t bytes_transferred           // Number of bytes received.
S>);
S>

Спасибо за ответ, как-то я этот параметр сразу не заметил.
Интересно, есть ли асинхронная функция, ожидающая дейтаграммы, но не пишущая данные в буфер, чтобы через available() можно было понять какой буфер нужно выделить, а не выделять с запасом.
Re[4]: Boost Asio. Асинхронный прием на udp::socket
От: savitar  
Дата: 30.01.13 11:57
Оценка:
Здравствуйте, roman_dev, Вы писали:

_>Интересно, есть ли асинхронная функция, ожидающая дейтаграммы, но не пишущая данные в буфер, чтобы через available() можно было понять какой буфер нужно выделить, а не выделять с запасом.


проще и эффективнее таки выделить буфер заранее, т.к. макс. размер UDP датаграмы около 0xFFFF, ради этого насиловать heap, зачем?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.