MCPcopy Create free account
hub / github.com/SFML/SFML / getRemoteAddress

Method getRemoteAddress

src/SFML/Network/TcpSocket.cpp:761–809  ·  view source on GitHub ↗

///////////////////////////////////////////////////////

Source from the content-addressed store, hash-verified

759
760////////////////////////////////////////////////////////////
761std::optional<IpAddress> TcpSocket::getRemoteAddress() const
762{
763 if (getNativeHandle() != priv::SocketImpl::invalidSocket())
764 {
765 // Get the address family of the socket
766 sockaddr_in6 address{};
767 priv::SocketImpl::AddrLength size = sizeof(address);
768
769 if (getsockname(getNativeHandle(), reinterpret_cast<sockaddr*>(&address), &size) == -1)
770 return std::nullopt;
771
772 // Retrieve information about the remote end of the socket
773 if (address.sin6_family == PF_INET)
774 {
775 sockaddr_in addressV4{};
776 priv::SocketImpl::AddrLength sizeV4 = sizeof(address);
777 if (getpeername(getNativeHandle(), reinterpret_cast<sockaddr*>(&addressV4), &sizeV4) != -1)
778 return IpAddress(ntohl(addressV4.sin_addr.s_addr));
779 }
780 else if (address.sin6_family == PF_INET6)
781 {
782 sockaddr_in6 addressV6{};
783 priv::SocketImpl::AddrLength sizeV6 = sizeof(addressV6);
784 if (getpeername(getNativeHandle(), reinterpret_cast<sockaddr*>(&addressV6), &sizeV6) != -1)
785 {
786 return IpAddress(
787 {addressV6.sin6_addr.s6_addr[0],
788 addressV6.sin6_addr.s6_addr[1],
789 addressV6.sin6_addr.s6_addr[2],
790 addressV6.sin6_addr.s6_addr[3],
791 addressV6.sin6_addr.s6_addr[4],
792 addressV6.sin6_addr.s6_addr[5],
793 addressV6.sin6_addr.s6_addr[6],
794 addressV6.sin6_addr.s6_addr[7],
795 addressV6.sin6_addr.s6_addr[8],
796 addressV6.sin6_addr.s6_addr[9],
797 addressV6.sin6_addr.s6_addr[10],
798 addressV6.sin6_addr.s6_addr[11],
799 addressV6.sin6_addr.s6_addr[12],
800 addressV6.sin6_addr.s6_addr[13],
801 addressV6.sin6_addr.s6_addr[14],
802 addressV6.sin6_addr.s6_addr[15]});
803 }
804 }
805 }
806
807 // We failed to retrieve the address
808 return std::nullopt;
809}
810
811
812////////////////////////////////////////////////////////////

Callers 7

TcpSocket.test.cppFile · 0.80
setupTlsMethod · 0.80
connectMethod · 0.80
runTcpServerFunction · 0.80
startMethod · 0.80

Calls 1

IpAddressClass · 0.50

Tested by

no test coverage detected