Точнее, третий параметр read
не является параметром длины, это условие завершения.Если это условие истинно, операции чтения / записи отменяются.udp::socket::receive
не принимает этот параметр, потому что он имеет смысл при использовании с streambuf
.udp::socket::receive
имеет 3 перегрузки, и ни одна из них не принимает streambuf
.Все берут MutableBufferSequence
, где хранятся входящие данные.При создании буфера для хранения данных вам необходимо указать размер этого буфера. Этот размер определяет, сколько байтов будет прочитано .Так что в вашем случае вам нужно подготовить буфер объемом 1 байт.Есть много способов сделать это, буфер .
boost::asio::ip::udp::socket sock{io,ep};
boost::asio::ip::udp::endpoint from;
// array of POD
char buf[1]; // 1 byte array
sock.receive_from(boost::asio::buffer(buf),from);
// pointer to POD
char buf2; // sizeof (char) == 1
sock.receive_from(boost::asio::buffer(&buf2,1),from);
// vector
std::vector<char> buf3(1); // 1 byte length
sock.receive_from(boost::asio::buffer(buf3),from);