| 534 | } |
| 535 | |
| 536 | Result GetName(Socket socket, Address* address, uint16_t* port) |
| 537 | { |
| 538 | int result = -1; |
| 539 | if (IsSocketIPv4(socket)) |
| 540 | { |
| 541 | struct sockaddr_in sock_addr = { 0 }; |
| 542 | socklen_t addr_len = sizeof(sock_addr); |
| 543 | result = getsockname(socket, (struct sockaddr *) &sock_addr, &addr_len); |
| 544 | if (result == 0) |
| 545 | { |
| 546 | address->m_family = dmSocket::DOMAIN_IPV4; |
| 547 | *IPv4(address) = sock_addr.sin_addr.s_addr; |
| 548 | *port = ntohs(sock_addr.sin_port); |
| 549 | } |
| 550 | } |
| 551 | #if !defined(DM_IPV6_UNSUPPORTED) |
| 552 | else if (IsSocketIPv6(socket)) |
| 553 | { |
| 554 | struct sockaddr_in6 sock_addr = { 0 }; |
| 555 | socklen_t addr_len = sizeof(sock_addr); |
| 556 | result = getsockname(socket, (struct sockaddr *) &sock_addr, &addr_len); |
| 557 | if (result == 0) |
| 558 | { |
| 559 | address->m_family = dmSocket::DOMAIN_IPV6; |
| 560 | memcpy(IPv6(address), &sock_addr.sin6_addr, sizeof(struct in6_addr)); |
| 561 | *port = ntohs(sock_addr.sin6_port); |
| 562 | } |
| 563 | } |
| 564 | #endif // no ipv6 |
| 565 | else |
| 566 | { |
| 567 | dmLogError("Failed to retrieve socket information, unsupported address family!"); |
| 568 | return RESULT_AFNOSUPPORT; |
| 569 | } |
| 570 | |
| 571 | return result == 0 ? RESULT_OK : NATIVETORESULT(DM_SOCKET_ERRNO); |
| 572 | } |
nothing calls this directly
no test coverage detected