Added getMyIpAddr to ip.h, ip.c.
[IRC.git] / Robust / src / Runtime / DSTM / interface / ip.c
index e15e89bb86049c7dc46a501304e3b7f4ba9f278f..bbd8e2f67329f7f9cad69e8df19a56712a6128dd 100644 (file)
@@ -6,6 +6,8 @@
 #include <netdb.h>
 #include <netinet/in.h>
 #include <string.h>
+#include <sys/ioctl.h>
+#include <net/if.h>
 
 #define LISTEN_PORT 2156
 
@@ -51,10 +53,38 @@ int checkServer(int mid, char *machineip) {
        while (connect(tmpsd, (struct sockaddr *) &serv_addr, sizeof(struct sockaddr)) < 0) {
                sleep(1);
        }
-       printf("DEBUG -> Connection established with %s\n", machineip);
        close(tmpsd);
        return 0;
 }
+
+unsigned int getMyIpAddr(const char *interfaceStr)
+{      
+       int sock;
+       struct ifreq interfaceInfo;
+       struct sockaddr_in *myAddr = (struct sockaddr_in *)&interfaceInfo.ifr_addr;
+
+       memset(&interfaceInfo, 0, sizeof(struct ifreq));
+
+       if((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0)
+       {
+               perror("getMyIpAddr():socket()");
+               return 1;
+       }
+
+       strcpy(interfaceInfo.ifr_name, interfaceStr);
+       myAddr->sin_family = AF_INET;
+       
+       if(ioctl(sock, SIOCGIFADDR, &interfaceInfo) != 0)
+       {
+               perror("getMyIpAddr():ioctl()");
+               return 1;
+       }
+
+       close(sock);
+
+       return ntohl(myAddr->sin_addr.s_addr);
+}
+
 /*
 main() {
        unsigned int mid;