This is my program, which demo bug in getifaddrs function: /* TEST BUG PROGRAM * * Compile * gcc -o getifaddrs getifaddrs.c * * Testing * with up and down ppp* interfaces run ./getifaddrs * * Author: Klimov Denis aka zver * email: kliden <at> km.ru * 23/03/2007 * * P.S. some problem info about this bug you may read * http://www.mail-archive.com/debian-glibc@lists.debian.org/msg32785.html */ #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/socket.h> #include <ifaddrs.h> int main() { struct ifaddrs *ifap = NULL; int rez = getifaddrs(&ifap); int st=1; if (rez==0 && ifap!=NULL) { do { if (st==1) st=0; else ifap=(*ifap).ifa_next; if (ifap->ifa_addr->sa_family == AF_INET) { printf("Interface name: %s \n",(*ifap).ifa_name); } } while ((*ifap).ifa_next!=NULL); } return 0; } Actual Results: Segmentation fault when ppp* device up List network device when _all_ ppp* device down Expected Results: List network device always some problem info about this bug you may read example at this page: http://www.mail-archive.com/debian-glibc@lists.debian.org/msg32785.html
Created attachment 1872 [details] prog for test bug
May be this help: http://sources.redhat.com/ml/ecos-patches/2004-06/msg00015.html
ifa_addr references either the address of the interface or the link level address of the interface, if one exists, otherwise it is NULL. That is, your test case is bogus.