| 77 | } |
| 78 | |
| 79 | void send(const boost::asio::ip::udp::endpoint& target, const std::byte* buffer, std::size_t len) { |
| 80 | struct sockaddr_in target_address { }; |
| 81 | |
| 82 | target_address.sin_family = AF_INET; |
| 83 | target_address.sin_addr.s_addr = htonl(target.address().to_v4().to_uint()); |
| 84 | target_address.sin_port = htons(target.port()); |
| 85 | |
| 86 | ssize_t result = |
| 87 | ::sendto(udp_socket_, buffer, len, 0, reinterpret_cast<const struct sockaddr*>(&target_address), sizeof(target_address)); |
| 88 | ASSERT_EQ(result, len); |
| 89 | } |
| 90 | |
| 91 | template<size_t N> |
| 92 | void send(const boost::asio::ip::udp::endpoint& target, const std::array<std::byte, N>& data) { |