202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
|
result = getaddrinfo(native, portstring, &hints, addrlist);
if (host != NULL) {
Tcl_DStringFree(&ds);
}
if (result != 0) {
goto error;
}
/*
* Put IPv4 addresses before IPv6 addresses to maximize backwards
* compatibility of [fconfigure -sockname] output.
*
* There might be more elegant/efficient ways to do this.
|
>
|
>
>
|
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
|
result = getaddrinfo(native, portstring, &hints, addrlist);
if (host != NULL) {
Tcl_DStringFree(&ds);
}
if (result != 0) {
if (result != EAI_SYSTEM) {
*errorMsgPtr = gai_strerror(result);
}
return 0;
}
/*
* Put IPv4 addresses before IPv6 addresses to maximize backwards
* compatibility of [fconfigure -sockname] output.
*
* There might be more elegant/efficient ways to do this.
|
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
|
}
i = 0;
for (p = *addrlist; p != NULL; p = p->ai_next) {
i++;
}
return 1;
/*
* Ought to use gai_strerror() here...
*/
error:
switch (result) {
case EAI_NONAME:
case EAI_SERVICE:
#if defined(EAI_ADDRFAMILY) && EAI_ADDRFAMILY != EAI_NONAME
case EAI_ADDRFAMILY:
#endif
#if defined(EAI_NODATA) && EAI_NODATA != EAI_NONAME
case EAI_NODATA:
#endif
*errorMsgPtr = gai_strerror(result);
errno = EHOSTUNREACH;
return 0;
#ifdef EAI_SYSTEM
case EAI_SYSTEM:
return 0;
#endif
default:
*errorMsgPtr = gai_strerror(result);
errno = ENXIO;
return 0;
}
}
/*
* Local Variables:
* mode: c
* c-basic-offset: 4
* fill-column: 78
* End:
*/
|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
|
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
|
}
i = 0;
for (p = *addrlist; p != NULL; p = p->ai_next) {
i++;
}
return 1;
}
/*
* Local Variables:
* mode: c
* c-basic-offset: 4
* fill-column: 78
* End:
*/
|