Changeset 1599 for pjproject/trunk/pjlib/src/pj/addr_resolv_sock.c
- Timestamp:
- Nov 26, 2007 5:36:18 AM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/trunk/pjlib/src/pj/addr_resolv_sock.c
r1592 r1599 21 21 #include <pj/string.h> 22 22 #include <pj/errno.h> 23 #include <pj/ip_helper.h> 23 24 #include <pj/compat/socket.h> 24 25 … … 55 56 } 56 57 58 /* Get the default IP interface */ 59 PJ_DEF(pj_status_t) pj_getdefaultipinterface(pj_in_addr *addr) 60 { 61 pj_sock_t fd; 62 pj_str_t cp; 63 pj_sockaddr_in a; 64 int len; 65 pj_status_t status; 66 67 status = pj_sock_socket(pj_AF_INET(), pj_SOCK_DGRAM(), 0, &fd); 68 if (status != PJ_SUCCESS) { 69 return status; 70 } 71 72 cp = pj_str("1.1.1.1"); 73 pj_sockaddr_in_init(&a, &cp, 53); 74 75 status = pj_sock_connect(fd, &a, sizeof(a)); 76 if (status != PJ_SUCCESS) { 77 pj_sock_close(fd); 78 return status; 79 } 80 81 len = sizeof(a); 82 status = pj_sock_getsockname(fd, &a, &len); 83 if (status != PJ_SUCCESS) { 84 pj_sock_close(fd); 85 return status; 86 } 87 88 pj_sock_close(fd); 89 90 *addr = a.sin_addr; 91 92 /* Success */ 93 return PJ_SUCCESS; 94 } 95 96 57 97 /* Resolve the IP address of local machine */ 58 98 PJ_DEF(pj_status_t) pj_gethostip(pj_in_addr *addr) … … 81 121 addr->s_addr == 0) 82 122 { 83 pj_sock_t fd; 84 pj_str_t cp; 85 pj_sockaddr_in a; 86 int len; 87 88 status = pj_sock_socket(pj_AF_INET(), pj_SOCK_DGRAM(), 0, &fd); 89 if (status != PJ_SUCCESS) { 90 return status; 123 status = pj_getdefaultipinterface(addr); 124 } 125 126 /* As the last resort, get the first available interface */ 127 if (status != PJ_SUCCESS) { 128 pj_in_addr addrs[2]; 129 unsigned count = PJ_ARRAY_SIZE(addrs); 130 131 status = pj_enum_ip_interface(&count, addrs); 132 if (status == PJ_SUCCESS) { 133 if (count != 0) { 134 *addr = addrs[0]; 135 } else { 136 /* Just return 127.0.0.1 */ 137 addr->s_addr = pj_htonl (0x7f000001); 138 } 91 139 } 92 93 cp = pj_str("1.1.1.1");94 pj_sockaddr_in_init(&a, &cp, 53);95 96 status = pj_sock_connect(fd, &a, sizeof(a));97 if (status != PJ_SUCCESS) {98 pj_sock_close(fd);99 /* Return 127.0.0.1 as the address */100 return PJ_SUCCESS;101 }102 103 len = sizeof(a);104 status = pj_sock_getsockname(fd, &a, &len);105 if (status != PJ_SUCCESS) {106 pj_sock_close(fd);107 /* Return 127.0.0.1 as the address */108 return PJ_SUCCESS;109 }110 111 pj_sock_close(fd);112 113 *addr = a.sin_addr;114 140 } 115 141
Note: See TracChangeset
for help on using the changeset viewer.