Мне нужно получить исходный IP-адрес для дейтаграммы на UDP-сервере, который я пишу с использованием boost ASIO.
В примере сервера датаграмм udp строка:
Примечание: мой текущий код идентичен существующему примеру асинхронного сервера udp в документации по boost asio.
socket_.async_receive_from(
boost::asio::buffer(data_, max_length), sender_endpoint_,
boost::bind(&server::handle_receive_from, this,
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
Проходит ошибка и bytes_transferred. Мне также нужен адрес сообщения.
Теперь я знаю, что могу использовать sender_endpoint_.address (). To_string () напрямую, но я
Я хотел бы передать это в качестве параметра.
Поэтому я попытался поместить sender_endpoint_.address () в качестве параметра.
т.е.
socket_.async_receive_from(
boost::asio::buffer(data_, MAX_LENGTH), sender_endpoint_,
boost::bind(&server::handle_receive_from, this,
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred,
sender_endpoint_.address()));
Но результат равен 0.0.0.0 при чтении из handle_receive_from.
Однако, если я просто обращаюсь к sender_endpoint_.address () внутри handle_receive_from
Я получаю 127.0.0.1, что является правильным.
Как правильно передать это? Мне это нужно, потому что несколько потоков будут вызывать io_service.run (), поэтому пакет из другого источника может перезаписать sender_endpoint, и мне нужно иметь возможность ответить на этот исходный пакет.