ga_nsearch.lc 5.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. #include "gai_hdr.h"## 1 ##src/libgai/ga_nsearch.c##
  2. /*## 2 ##src/libgai/ga_nsearch.c##
  3. * Set up the search[] array with the hostnames and address families## 3 ##src/libgai/ga_nsearch.c##
  4. * that we are to look up.## 4 ##src/libgai/ga_nsearch.c##
  5. */## 5 ##src/libgai/ga_nsearch.c##
  6. /* include ga_nsearch1 */
  7. int## 6 ##src/libgai/ga_nsearch.c##
  8. ga_nsearch(const char *hostname, const struct addrinfo *hintsp,## 7 ##src/libgai/ga_nsearch.c##
  9. struct search *search)## 8 ##src/libgai/ga_nsearch.c##
  10. {## 9 ##src/libgai/ga_nsearch.c##
  11. int nsearch = 0;## 10 ##src/libgai/ga_nsearch.c##
  12. if (hostname == NULL || hostname[0] == '\0') {## 11 ##src/libgai/ga_nsearch.c##
  13. if (hintsp->ai_flags & AI_PASSIVE) {## 12 ##src/libgai/ga_nsearch.c##
  14. /* 4no hostname and AI_PASSIVE: implies wildcard bind */## 13 ##src/libgai/ga_nsearch.c##
  15. switch (hintsp->ai_family) {## 14 ##src/libgai/ga_nsearch.c##
  16. case AF_INET:## 15 ##src/libgai/ga_nsearch.c##
  17. search[nsearch].host = "0.0.0.0";## 16 ##src/libgai/ga_nsearch.c##
  18. search[nsearch].family = AF_INET;## 17 ##src/libgai/ga_nsearch.c##
  19. nsearch++;## 18 ##src/libgai/ga_nsearch.c##
  20. break;## 19 ##src/libgai/ga_nsearch.c##
  21. case AF_INET6:## 20 ##src/libgai/ga_nsearch.c##
  22. search[nsearch].host = "0::0";## 21 ##src/libgai/ga_nsearch.c##
  23. search[nsearch].family = AF_INET6;## 22 ##src/libgai/ga_nsearch.c##
  24. nsearch++;## 23 ##src/libgai/ga_nsearch.c##
  25. break;## 24 ##src/libgai/ga_nsearch.c##
  26. case AF_UNSPEC:## 25 ##src/libgai/ga_nsearch.c##
  27. search[nsearch].host = "0::0"; /* IPv6 first, then IPv4 */## 26 ##src/libgai/ga_nsearch.c##
  28. search[nsearch].family = AF_INET6;## 27 ##src/libgai/ga_nsearch.c##
  29. nsearch++;## 28 ##src/libgai/ga_nsearch.c##
  30. search[nsearch].host = "0.0.0.0";## 29 ##src/libgai/ga_nsearch.c##
  31. search[nsearch].family = AF_INET;## 30 ##src/libgai/ga_nsearch.c##
  32. nsearch++;## 31 ##src/libgai/ga_nsearch.c##
  33. break;## 32 ##src/libgai/ga_nsearch.c##
  34. }## 33 ##src/libgai/ga_nsearch.c##
  35. /* end ga_nsearch1 */
  36. /* include ga_nsearch2 */
  37. } else {## 34 ##src/libgai/ga_nsearch.c##
  38. /* 4no host and not AI_PASSIVE: connect to local host */## 35 ##src/libgai/ga_nsearch.c##
  39. switch (hintsp->ai_family) {## 36 ##src/libgai/ga_nsearch.c##
  40. case AF_INET:## 37 ##src/libgai/ga_nsearch.c##
  41. search[nsearch].host = "localhost"; /* 127.0.0.1 */## 38 ##src/libgai/ga_nsearch.c##
  42. search[nsearch].family = AF_INET;## 39 ##src/libgai/ga_nsearch.c##
  43. nsearch++;## 40 ##src/libgai/ga_nsearch.c##
  44. break;## 41 ##src/libgai/ga_nsearch.c##
  45. case AF_INET6:## 42 ##src/libgai/ga_nsearch.c##
  46. search[nsearch].host = "0::1";## 43 ##src/libgai/ga_nsearch.c##
  47. search[nsearch].family = AF_INET6;## 44 ##src/libgai/ga_nsearch.c##
  48. nsearch++;## 45 ##src/libgai/ga_nsearch.c##
  49. break;## 46 ##src/libgai/ga_nsearch.c##
  50. case AF_UNSPEC:## 47 ##src/libgai/ga_nsearch.c##
  51. search[nsearch].host = "0::1"; /* IPv6 first, then IPv4 */## 48 ##src/libgai/ga_nsearch.c##
  52. search[nsearch].family = AF_INET6;## 49 ##src/libgai/ga_nsearch.c##
  53. nsearch++;## 50 ##src/libgai/ga_nsearch.c##
  54. search[nsearch].host = "localhost";## 51 ##src/libgai/ga_nsearch.c##
  55. search[nsearch].family = AF_INET;## 52 ##src/libgai/ga_nsearch.c##
  56. nsearch++;## 53 ##src/libgai/ga_nsearch.c##
  57. break;## 54 ##src/libgai/ga_nsearch.c##
  58. }## 55 ##src/libgai/ga_nsearch.c##
  59. }## 56 ##src/libgai/ga_nsearch.c##
  60. /* end ga_nsearch2 */
  61. /* include ga_nsearch3 */
  62. } else { /* host is specified */## 57 ##src/libgai/ga_nsearch.c##
  63. switch (hintsp->ai_family) {## 58 ##src/libgai/ga_nsearch.c##
  64. case AF_INET:## 59 ##src/libgai/ga_nsearch.c##
  65. search[nsearch].host = hostname;## 60 ##src/libgai/ga_nsearch.c##
  66. search[nsearch].family = AF_INET;## 61 ##src/libgai/ga_nsearch.c##
  67. nsearch++;## 62 ##src/libgai/ga_nsearch.c##
  68. break;## 63 ##src/libgai/ga_nsearch.c##
  69. case AF_INET6:## 64 ##src/libgai/ga_nsearch.c##
  70. search[nsearch].host = hostname;## 65 ##src/libgai/ga_nsearch.c##
  71. search[nsearch].family = AF_INET6;## 66 ##src/libgai/ga_nsearch.c##
  72. nsearch++;## 67 ##src/libgai/ga_nsearch.c##
  73. break;## 68 ##src/libgai/ga_nsearch.c##
  74. case AF_UNSPEC:## 69 ##src/libgai/ga_nsearch.c##
  75. search[nsearch].host = hostname;## 70 ##src/libgai/ga_nsearch.c##
  76. search[nsearch].family = AF_INET6; /* IPv6 first */## 71 ##src/libgai/ga_nsearch.c##
  77. nsearch++;## 72 ##src/libgai/ga_nsearch.c##
  78. search[nsearch].host = hostname;## 73 ##src/libgai/ga_nsearch.c##
  79. search[nsearch].family = AF_INET; /* then IPv4 */## 74 ##src/libgai/ga_nsearch.c##
  80. nsearch++;## 75 ##src/libgai/ga_nsearch.c##
  81. break;## 76 ##src/libgai/ga_nsearch.c##
  82. }## 77 ##src/libgai/ga_nsearch.c##
  83. }## 78 ##src/libgai/ga_nsearch.c##
  84. if (nsearch < 1 || nsearch > 2)## 79 ##src/libgai/ga_nsearch.c##
  85. err_quit("nsearch = %d", nsearch);## 80 ##src/libgai/ga_nsearch.c##
  86. return (nsearch);## 81 ##src/libgai/ga_nsearch.c##
  87. }## 82 ##src/libgai/ga_nsearch.c##
  88. /* end ga_nsearch3 */