You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

26 lines
1.1 KiB

  1. --- a/src/net/socket_datagram.cc
  2. +++ b/src/net/socket_datagram.cc
  3. @@ -73,6 +73,23 @@ SocketDatagram::write_datagram(const voi
  4. int r;
  5. if (sa != NULL) {
  6. +#ifdef RAK_USE_INET6
  7. + if (m_ipv6_socket && sa->family() == rak::socket_address::pf_inet) {
  8. + uint32_t addr32[4];
  9. + sockaddr_in6 mapped_addr;
  10. + memset(&mapped_addr, 0, sizeof(mapped_addr));
  11. + mapped_addr.sin6_family = AF_INET6;
  12. + addr32[0] = 0;
  13. + addr32[1] = 0;
  14. + addr32[2] = htonl(0xffff);
  15. + addr32[3] = sa->sa_inet()->address_n();
  16. + memcpy(mapped_addr.sin6_addr.s6_addr, addr32, sizeof(uint32_t) * 4);
  17. + mapped_addr.sin6_port = sa->sa_inet()->port_n();
  18. + r = ::sendto(m_fileDesc, buffer, length, 0, (sockaddr*)&mapped_addr, sizeof(mapped_addr));
  19. + } else if (m_ipv6_socket && sa->family() == rak::socket_address::pf_inet6) {
  20. + r = ::sendto(m_fileDesc, buffer, length, 0, sa->sa_inet6()->c_sockaddr(), sizeof(rak::socket_address_inet6));
  21. + } else
  22. +#endif
  23. r = ::sendto(m_fileDesc, buffer, length, 0, sa->sa_inet()->c_sockaddr(), sizeof(rak::socket_address_inet));
  24. } else {
  25. r = ::send(m_fileDesc, buffer, length, 0);