Glover George wrote: > Hi, I'm working on a little module here and was wondering what the BEST > way to get an interface's current ip address by using it's name (i.e., > eth0) is. I was trying one way using sockets and it just doesn't seem > to reliably give it to me every time. I was using these two functions > below, but I it would return NULL some of the time from > IPCon_GetIpAddrByStr sometimes, so I'm not sure. I need a way to be > able to reliably obtain this ip at any give time (due to dhcp, etc). Any > pointers? TIA. > > struct in_addr * IPCon::IPCon_GetIpAddr(void) > { > struct ifreq ifr; > struct sockaddr_in *saddr; > int fd; > fd = get_sockfd(); > if (fd >= 0 ) > { > strcpy(ifr.ifr_name, m_ifname); > ifr.ifr_addr.sa_family = AF_INET; > if (ioctl(fd, SIOCGIFADDR, &ifr) == 0) > { > saddr = (sockaddr_in *)&ifr.ifr_addr; > return &saddr->sin_addr; You are returning a pointer to data which is on the stack, and which ceases to be valid once you've returned from the function. You should either have the caller supply the buffer, e.g. bool IPCon::IPCon_GetIpAddr(struct in_addr *result) or allocate the memory dynamically, with malloc() or new. -- Glynn Clements <glynn.clements@virgin.net> - : send the line "unsubscribe linux-net" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html