1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| InetAddress InetAddress::getLocalAddress()
{
// Create the socket
pMillie::InterfaceSocket Socket = socket(PF_INET, SOCK_DGRAM, 0);
if (Socket == INVALID_SOCKET)
throw SocketException("[Socket] Can't resolve name");
// Build the host address (use a random port)
sockaddr_in SockAddr;
memset(SockAddr.sin_zero, 0, sizeof(SockAddr.sin_zero));
SockAddr.sin_addr.s_addr = INADDR_LOOPBACK;
SockAddr.sin_family = AF_INET;
SockAddr.sin_port = htons(4567);
// Connect the socket
if (pMillie::iconnect(Socket, reinterpret_cast<sockaddr*>(&SockAddr), sizeof(SockAddr)) == -1)
{
pMillie::iclose(Socket);
throw SocketException("[Socket] Can't resolve name");
}
// Get the local address of the socket connection
socklen_t Size = sizeof(SockAddr);
if (getsockname(Socket, reinterpret_cast<sockaddr*>(&SockAddr), &Size) == -1)
{
pMillie::iclose(Socket);
throw SocketException("[Socket] Can't resolve name");
}
pMillie::iclose(Socket);
return InetAddress(inet_ntoa(SockAddr.sin_addr));
} |
Partager