看板 DFBSD_bugs 關於我們 聯絡資訊
Hi, I found this while trying to get ushare to work - the SIOCGIFADDR ioctl doesn't set the IP address (at least for re devices), what you get is whatever was in the struct ifreq before the call. Running v2.9.0.105.gba1cb-DEVELOPMENT - but it's been going on for a while I just haven't got to the bottom of the problem until now. My test code (below) always prints 0. #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <sys/sysctl.h> #include <net/if_dl.h> #include <net/if.h> #include <sys/ioctl.h> #include <netinet/in.h> int main (int argc, char **argv) { int sock; int32_t ip; struct ifreq ifr; memset (&ifr, 0, sizeof ifr); sock = socket (AF_INET, SOCK_STREAM, 0); if (sock < 0) { perror ("socket"); exit(1); } strcpy(ifr.ifr_name, "re0"); ifr.ifr_addr.sa_family = AF_INET; if (ioctl (sock, SIOCGIFADDR, &ifr) < 0) { perror("ioctl"); exit(1); } ip = ((struct sockaddr_in *) &ifr.ifr_addr)->sin_addr.s_addr; printf("%x\n", ip); } -- Steve O'Hara-Smith | Directable Mirror Arrays C:>WIN | A better way to focus the sun The computer obeys and wins. | licences available see You lose and Bill collects. | http://www.sohara.org/