Changeset 5349 for trunk/oscam-reader.c
- Timestamp:
- 06/03/11 01:38:19 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/oscam-reader.c
r5348 r5349 103 103 } 104 104 105 // according to documentation getaddrinfo() is thread safe 106 int32_t hostResolve(struct s_reader *rdr) 107 { 108 int32_t result = 0; 105 int32_t hostResolve(struct s_reader *rdr){ 109 106 struct s_client *cl = rdr->client; 110 107 111 108 if(!cl) return 0; 109 110 in_addr_t last_ip = cl->ip; 111 cl->ip = cs_getIPfromHost(rdr->device); 112 cl->udp_sa.sin_addr.s_addr = cl->ip; 112 113 113 in_addr_t last_ip = cl->ip; 114 115 if (cfg.resolve_gethostbyname) { //Resolve with gethostbyname: 116 117 while (cs_trylock(&gethostbyname_lock)) { 118 cs_debug_mask(D_TRACE, "trylock hostResolve wait"); 119 cs_sleepms(50); 120 } 121 122 struct hostent *rht = gethostbyname(rdr->device); 123 if (!rht) { 124 cs_log("can't resolve %s", rdr->device); 125 result = 0; 126 } else { 127 memcpy(&cl->udp_sa.sin_addr, rht->h_addr, sizeof(cl->udp_sa.sin_addr)); 128 cl->ip=cl->udp_sa.sin_addr.s_addr; 129 result = 1; 130 } 131 132 pthread_mutex_unlock(&gethostbyname_lock); 133 } 134 else { //Resolve with getaddrinfo: 135 struct addrinfo hints, *res = NULL; 136 memset(&hints, 0, sizeof(hints)); 137 hints.ai_socktype = SOCK_STREAM; 138 hints.ai_family = cl->udp_sa.sin_family; 139 hints.ai_protocol = IPPROTO_TCP; 140 141 int32_t err = getaddrinfo(rdr->device, NULL, &hints, &res); 142 if (err != 0 || !res || !res->ai_addr) { 143 cs_log("can't resolve %s, error: %s", rdr->device, err ? gai_strerror(err) : "unknown"); 144 result = 0; 145 } else { 146 cl->udp_sa.sin_addr.s_addr = ((struct sockaddr_in *)(res->ai_addr))->sin_addr.s_addr; 147 cl->ip = cl->udp_sa.sin_addr.s_addr; 148 result = 1; 149 } 150 if (res) freeaddrinfo(res); 151 } 152 153 if (!result) { 154 cl->udp_sa.sin_addr.s_addr = 0; 155 cl->ip = 0; 156 } else if (cl->ip != last_ip) { 114 if (cl->ip != last_ip) { 157 115 cs_log("%s: resolved ip=%s", rdr->device, cs_inet_ntoa(cl->ip)); 158 116 } 159 117 160 return result;118 return cl->ip?1:0; 161 119 } 162 120
Note:
See TracChangeset
for help on using the changeset viewer.