Search code examples
cwindowsip-addresswinsockets

How to get the ip address under Windows


all i already had a "socketfd", and i was wondering how to use it to retrieve the local ip address. under linux, i can do something like this(not exactly correct):

struct ifreq ifr;
ifr.ifr_addr.sa_family = AF_INET;
ioctl(socketfd, SIOCGIFADDR, &ifr);
char *address = inet_ntoa(((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr);

but, on Windows, how can i achieve the same goal? (not using MFC) many thanks.

edit: maybe my host has multiple ip addresses, and i want the one "connected" with "socketfd".


Solution

  • If the socket is connected, then getsockname() on it will fill a struct sockaddr with the local name for the socket. This works on both OSes (and anything with BSD sockets).