Заменил listen_address на:
boost::asio::ip::address listen_address = boost::asio::ip::address_v4::any();
По поводу join_group — проверил, интерфейс там почему-то никак не задать:
http://www.boost.org/doc/libs/1_61_0/doc/html/boost_asio/reference/ip__multicast__join_group.html , хотя и написано: "Socket option to join a multicast group
on a specified interface."
А как задать этот интерфейс, на котором ловим UDP пакеты? Делаю под Linux.
В итоге пока не работает...