@@ -352,59 +352,59 @@ namespace asyncpp::io::detail {
352352 if (res == SOCKET_ERROR) throw std::system_error (WSAGetLastError (), std::system_category ());
353353 }
354354
355- void io_engine_iocp::socket_multicast_join (socket_handle_t socket, address group, address interface ) {
356- if (group.type () != interface .type ())
355+ void io_engine_iocp::socket_multicast_join (socket_handle_t socket, address group, address iface ) {
356+ if (group.type () != iface .type ())
357357 throw std::system_error (std::make_error_code (std::errc::invalid_argument),
358358 " group and interface need to be of the same type" );
359359 if (group.is_ipv4 ()) {
360360 struct ip_mreq mc_req{};
361361 mc_req.imr_multiaddr = group.ipv4 ().to_sockaddr_in ().first .sin_addr ;
362- mc_req.imr_interface = interface .ipv4 ().to_sockaddr_in ().first .sin_addr ;
363- auto res = setsockopt (socket, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mc_req, sizeof (mc_req));
362+ mc_req.imr_interface = iface .ipv4 ().to_sockaddr_in ().first .sin_addr ;
363+ auto res = setsockopt (socket, IPPROTO_IP, IP_ADD_MEMBERSHIP, reinterpret_cast < const char *>( &mc_req) , sizeof (mc_req));
364364 if (res < 0 ) throw std::system_error (WSAGetLastError (), std::system_category (), " setsockopt failed" );
365365 } else if (group.is_ipv6 ()) {
366366 struct ipv6_mreq mc_req{};
367367 mc_req.ipv6mr_multiaddr = group.ipv6 ().to_sockaddr_in6 ().first .sin6_addr ;
368- mc_req.ipv6mr_interface = interface .ipv6 ().to_sockaddr_in6 ().first .sin6_scope_id ;
369- auto res = setsockopt (socket, IPPROTO_IPV6, IPV6_ADD_MEMBERSHIP, &mc_req, sizeof (mc_req));
368+ mc_req.ipv6mr_interface = iface .ipv6 ().to_sockaddr_in6 ().first .sin6_scope_id ;
369+ auto res = setsockopt (socket, IPPROTO_IPV6, IPV6_ADD_MEMBERSHIP, reinterpret_cast < const char *>( &mc_req) , sizeof (mc_req));
370370 if (res < 0 ) throw std::system_error (WSAGetLastError (), std::system_category (), " setsockopt failed" );
371371 } else {
372372 throw std::system_error (std::make_error_code (std::errc::not_supported),
373373 " multicast is only supported on IPv4/IPv6" );
374374 }
375375 }
376376
377- void io_engine_iocp::socket_multicast_drop (socket_handle_t socket, address group, address interface ) {
378- if (group.type () != interface .type ())
377+ void io_engine_iocp::socket_multicast_drop (socket_handle_t socket, address group, address iface ) {
378+ if (group.type () != iface .type ())
379379 throw std::system_error (std::make_error_code (std::errc::invalid_argument),
380380 " group and interface need to be of the same type" );
381381 if (group.is_ipv4 ()) {
382382 struct ip_mreq mc_req{};
383383 mc_req.imr_multiaddr = group.ipv4 ().to_sockaddr_in ().first .sin_addr ;
384- mc_req.imr_interface = interface .ipv4 ().to_sockaddr_in ().first .sin_addr ;
385- auto res = setsockopt (socket, IPPROTO_IP, IP_DROP_MEMBERSHIP, &mc_req, sizeof (mc_req));
384+ mc_req.imr_interface = iface .ipv4 ().to_sockaddr_in ().first .sin_addr ;
385+ auto res = setsockopt (socket, IPPROTO_IP, IP_DROP_MEMBERSHIP, reinterpret_cast < const char *>( &mc_req) , sizeof (mc_req));
386386 if (res < 0 ) throw std::system_error (WSAGetLastError (), std::system_category (), " setsockopt failed" );
387387 } else if (group.is_ipv6 ()) {
388388 struct ipv6_mreq mc_req{};
389389 mc_req.ipv6mr_multiaddr = group.ipv6 ().to_sockaddr_in6 ().first .sin6_addr ;
390- mc_req.ipv6mr_interface = interface .ipv6 ().to_sockaddr_in6 ().first .sin6_scope_id ;
391- auto res = setsockopt (socket, IPPROTO_IPV6, IPV6_DROP_MEMBERSHIP, &mc_req, sizeof (mc_req));
390+ mc_req.ipv6mr_interface = iface .ipv6 ().to_sockaddr_in6 ().first .sin6_scope_id ;
391+ auto res = setsockopt (socket, IPPROTO_IPV6, IPV6_DROP_MEMBERSHIP, reinterpret_cast < const char *>( &mc_req) , sizeof (mc_req));
392392 if (res < 0 ) throw std::system_error (WSAGetLastError (), std::system_category (), " setsockopt failed" );
393393 } else {
394394 throw std::system_error (std::make_error_code (std::errc::not_supported),
395395 " multicast is only supported on IPv4/IPv6" );
396396 }
397397 }
398398
399- void io_engine_iocp::socket_multicast_set_send_interface (socket_handle_t socket, address interface ) {
400- if (interface .is_ipv4 ()) {
401- auto addr = interface .ipv4 ().to_sockaddr_in ().first .sin_addr .s_addr ;
402- auto res = setsockopt (socket, IPPROTO_IP, IP_MULTICAST_IF, reinterpret_cast <char *>(&addr), sizeof (addr));
399+ void io_engine_iocp::socket_multicast_set_send_interface (socket_handle_t socket, address iface ) {
400+ if (iface .is_ipv4 ()) {
401+ auto addr = iface .ipv4 ().to_sockaddr_in ().first .sin_addr .s_addr ;
402+ auto res = setsockopt (socket, IPPROTO_IP, IP_MULTICAST_IF, reinterpret_cast <const char *>(&addr), sizeof (addr));
403403 if (res < 0 ) throw std::system_error (WSAGetLastError (), std::system_category (), " setsockopt failed" );
404- } else if (interface .is_ipv6 ()) {
405- auto scope = interface .ipv6 ().to_sockaddr_in6 ().first .sin6_scope_id ;
404+ } else if (iface .is_ipv6 ()) {
405+ auto scope = iface .ipv6 ().to_sockaddr_in6 ().first .sin6_scope_id ;
406406 auto res =
407- setsockopt (socket, IPPROTO_IPV6, IPV6_MULTICAST_IF, reinterpret_cast <char *>(&scope), sizeof (scope));
407+ setsockopt (socket, IPPROTO_IPV6, IPV6_MULTICAST_IF, reinterpret_cast <const char *>(&scope), sizeof (scope));
408408 if (res < 0 ) throw std::system_error (WSAGetLastError (), std::system_category (), " setsockopt failed" );
409409 } else {
410410 throw std::system_error (std::make_error_code (std::errc::not_supported),
@@ -417,11 +417,11 @@ namespace asyncpp::io::detail {
417417 if (ttl > std::numeric_limits<int >::max ()) throw std::invalid_argument (" ttl value out of range" );
418418 int ittl = ttl;
419419 if (type == address_type::ipv4) {
420- auto res = setsockopt (socket, IPPROTO_IP, IP_MULTICAST_TTL, reinterpret_cast <char *>(&ittl), sizeof (ittl));
420+ auto res = setsockopt (socket, IPPROTO_IP, IP_MULTICAST_TTL, reinterpret_cast <const char *>(&ittl), sizeof (ittl));
421421 if (res < 0 ) throw std::system_error (WSAGetLastError (), std::system_category (), " setsockopt failed" );
422422 } else if (type == address_type::ipv6) {
423423 auto res =
424- setsockopt (socket, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, reinterpret_cast <char *>(&ittl), sizeof (ittl));
424+ setsockopt (socket, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, reinterpret_cast <const char *>(&ittl), sizeof (ittl));
425425 if (res < 0 ) throw std::system_error (WSAGetLastError (), std::system_category (), " setsockopt failed" );
426426 } else {
427427 throw std::system_error (std::make_error_code (std::errc::not_supported),
@@ -433,11 +433,11 @@ namespace asyncpp::io::detail {
433433 auto type = get_handle_type (socket);
434434 int val = enabled ? 1 : 0 ;
435435 if (type == address_type::ipv4) {
436- auto res = setsockopt (socket, IPPROTO_IP, IP_MULTICAST_LOOP, reinterpret_cast <char *>(&val), sizeof (val));
436+ auto res = setsockopt (socket, IPPROTO_IP, IP_MULTICAST_LOOP, reinterpret_cast <const char *>(&val), sizeof (val));
437437 if (res < 0 ) throw std::system_error (WSAGetLastError (), std::system_category (), " setsockopt failed" );
438438 } else if (type == address_type::ipv6) {
439439 auto res =
440- setsockopt (socket, IPPROTO_IPV6, IPV6_MULTICAST_LOOP, reinterpret_cast <char *>(&val), sizeof (val));
440+ setsockopt (socket, IPPROTO_IPV6, IPV6_MULTICAST_LOOP, reinterpret_cast <const char *>(&val), sizeof (val));
441441 if (res < 0 ) throw std::system_error (WSAGetLastError (), std::system_category (), " setsockopt failed" );
442442 } else {
443443 throw std::system_error (std::make_error_code (std::errc::not_supported),
0 commit comments