On Dec 26, 2003, at 7:26 PM, Yukihiro Matsumoto wrote: > Hi, > > In message "Error with Socket.getaddrinfo on OS X" > on 03/12/27, Richard Kilmer <rich / infoether.com> writes: > > | > irb > |irb(main):001:0> require 'socket' > |=> true > |irb(main):002:0> Socket::getaddrinfo('192.168.1.100', 8081, > |Socket::AF_UNSPEC, Socket::SOCK_STREAM, 0, Socket::AI_PASSIVE) > |SocketError: getnameinfo: nodename nor servname provided, or not known > | from (irb):2:in `getaddrinfo' > | from (irb):2 > > I have another report that getaddrinfo(3) is not working properly on > OSX. Can you show me mkmf.log in the ext/socket directory? > > matz. > > > File socket/mkmf.log have_library: checking for t_open() in -lnsl... -------------------- no "gcc -o conftest -I/Users/rich/build/ruby -I/Users/rich/build/ruby -g -O2 -pipe -fno-common conftest.c -L"/Users/rich/build/ruby" -L"/usr/local/lib" -lruby-static -lnsl -ldl -lobjc " ld: can't locate file for: -lnsl checked program was: /* begin */ /*top*/ int main() { return 0; } int t() { t_open(); return 0; } /* end */ "gcc -o conftest -I/Users/rich/build/ruby -I/Users/rich/build/ruby -g -O2 -pipe -fno-common conftest.c -L"/Users/rich/build/ruby" -L"/usr/local/lib" -lruby-static -lnsl -ldl -lobjc " conftest.c: In function `t': conftest.c:5: error: `t_open' undeclared (first use in this function) conftest.c:5: error: (Each undeclared identifier is reported only once conftest.c:5: error: for each function it appears in.) checked program was: /* begin */ /*top*/ int main() { return 0; } int t() { void ((*volatile p)()); p = (void ((*)()))t_open; return 0; } /* end */ -------------------- have_library: checking for socket() in -lsocket... -------------------- no "gcc -o conftest -I/Users/rich/build/ruby -I/Users/rich/build/ruby -g -O2 -pipe -fno-common conftest.c -L"/Users/rich/build/ruby" -L"/usr/local/lib" -lruby-static -lsocket -ldl -lobjc " ld: can't locate file for: -lsocket checked program was: /* begin */ /*top*/ int main() { return 0; } int t() { socket(); return 0; } /* end */ "gcc -o conftest -I/Users/rich/build/ruby -I/Users/rich/build/ruby -g -O2 -pipe -fno-common conftest.c -L"/Users/rich/build/ruby" -L"/usr/local/lib" -lruby-static -lsocket -ldl -lobjc " conftest.c: In function `t': conftest.c:5: error: `socket' undeclared (first use in this function) conftest.c:5: error: (Each undeclared identifier is reported only once conftest.c:5: error: for each function it appears in.) checked program was: /* begin */ /*top*/ int main() { return 0; } int t() { void ((*volatile p)()); p = (void ((*)()))socket; return 0; } /* end */ -------------------- "gcc -o conftest -I/Users/rich/build/ruby -I/Users/rich/build/ruby -g -O2 -pipe -fno-common conftest.c -L"/Users/rich/build/ruby" -L"/usr/local/lib" -lruby-static -ldl -lobjc " checked program was: /* begin */ #include <sys/types.h> #include <sys/socket.h> main() { socket(AF_INET6, SOCK_STREAM, 0); } /* end */ "gcc -E -I/Users/rich/build/ruby -I/Users/rich/build/ruby -g -O2 -pipe -fno-common -DENABLE_IPV6 conftest.c -o conftest.i" conftest.c:4:3: #error checked program was: /* begin */ #include <netinet/in.h> /*top*/ #ifndef IPV6_INRIA_VERSION # error #endif /* end */ "gcc -E -I/Users/rich/build/ruby -I/Users/rich/build/ruby -g -O2 -pipe -fno-common -DENABLE_IPV6 conftest.c -o conftest.i" checked program was: /* begin */ #include <netinet/in.h> /*top*/ #ifndef __KAME__ # error #endif /* end */ "gcc -o conftest -I/Users/rich/build/ruby -I/Users/rich/build/ruby -DINET6 -g -O2 -pipe -fno-common -DENABLE_IPV6 conftest.c -L"/Users/rich/build/ruby" -L"/usr/local/lib" -lruby-static -ldl -lobjc " checked program was: /* begin */ #ifdef _WIN32 # include <windows.h> # include <winsock.h> #else # include <sys/types.h> # include <netdb.h> # include <string.h> # include <sys/socket.h> # include <netinet/in.h> #endif int main() { struct sockaddr_in sin; sin.sin_len; return 0; } /* end */ "gcc -o conftest -I/Users/rich/build/ruby -I/Users/rich/build/ruby -DHAVE_SIN_LEN -DINET6 -g -O2 -pipe -fno-common -DENABLE_IPV6 conftest.c -L"/Users/rich/build/ruby" -L"/usr/local/lib" -lruby-static -ldl -lobjc " checked program was: /* begin */ #ifdef _WIN32 # include <windows.h> # include <winsock.h> #else # include <sys/types.h> # include <netdb.h> # include <string.h> # include <sys/socket.h> #endif int main() { struct sockaddr_storage ss; ss.ss_family; return 0; } /* end */ "gcc -o conftest -I/Users/rich/build/ruby -I/Users/rich/build/ruby -DHAVE_SOCKADDR_STORAGE -DHAVE_SIN_LEN -DINET6 -g -O2 -pipe -fno-common -DENABLE_IPV6 conftest.c -L"/Users/rich/build/ruby" -L"/usr/local/lib" -lruby-static -ldl -lobjc " checked program was: /* begin */ #include <sys/types.h> #include <netdb.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> int main() { struct sockaddr sa; sa.sa_len; return 0; } /* end */ have_header: checking for netinet/tcp.h... -------------------- yes "gcc -E -I/Users/rich/build/ruby -I/Users/rich/build/ruby -DHAVE_SA_LEN -DHAVE_SOCKADDR_STORAGE -DHAVE_SIN_LEN -DINET6 -g -O2 -pipe -fno-common -DENABLE_IPV6 conftest.c -o conftest.i" checked program was: /* begin */ #include <netinet/tcp.h> /* end */ -------------------- have_header: checking for netinet/udp.h... -------------------- yes "gcc -E -I/Users/rich/build/ruby -I/Users/rich/build/ruby -DHAVE_SA_LEN -DHAVE_SOCKADDR_STORAGE -DHAVE_SIN_LEN -DINET6 -g -O2 -pipe -fno-common -DENABLE_IPV6 conftest.c -o conftest.i" checked program was: /* begin */ #include <netinet/udp.h> /* end */ -------------------- have_func: checking for sendmsg()... -------------------- yes "gcc -o conftest -I/Users/rich/build/ruby -I/Users/rich/build/ruby -DHAVE_SA_LEN -DHAVE_SOCKADDR_STORAGE -DHAVE_SIN_LEN -DINET6 -g -O2 -pipe -fno-common -DENABLE_IPV6 conftest.c -L"/Users/rich/build/ruby" -L"/usr/local/lib" -lruby-static -ldl -lobjc " checked program was: /* begin */ /*top*/ int main() { return 0; } int t() { sendmsg(); return 0; } /* end */ -------------------- have_func: checking for recvmsg()... -------------------- yes "gcc -o conftest -I/Users/rich/build/ruby -I/Users/rich/build/ruby -DHAVE_SA_LEN -DHAVE_SOCKADDR_STORAGE -DHAVE_SIN_LEN -DINET6 -g -O2 -pipe -fno-common -DENABLE_IPV6 conftest.c -L"/Users/rich/build/ruby" -L"/usr/local/lib" -lruby-static -ldl -lobjc " checked program was: /* begin */ /*top*/ int main() { return 0; } int t() { recvmsg(); return 0; } /* end */ -------------------- have_struct_member: checking for struct msghdr.msg_control... -------------------- yes "gcc -c -I/Users/rich/build/ruby -I/Users/rich/build/ruby -DHAVE_SA_LEN -DHAVE_SOCKADDR_STORAGE -DHAVE_SIN_LEN -DINET6 -g -O2 -pipe -fno-common -DENABLE_IPV6 conftest.c" checked program was: /* begin */ #include <sys/types.h> #include <sys/socket.h> /*top*/ int main() { return 0; } int s = (char *)&((struct msghdr*)0)->msg_control - (char *)0; /* end */ -------------------- have_struct_member: checking for struct msghdr.msg_accrights... -------------------- no "gcc -c -I/Users/rich/build/ruby -I/Users/rich/build/ruby -DHAVE_SA_LEN -DHAVE_SOCKADDR_STORAGE -DHAVE_SIN_LEN -DINET6 -g -O2 -pipe -fno-common -DENABLE_IPV6 conftest.c" conftest.c:7: error: structure has no member named `msg_accrights' checked program was: /* begin */ #include <sys/types.h> #include <sys/socket.h> /*top*/ int main() { return 0; } int s = (char *)&((struct msghdr*)0)->msg_accrights - (char *)0; /* end */ -------------------- "gcc -o conftest -I/Users/rich/build/ruby -I/Users/rich/build/ruby -DHAVE_SA_LEN -DHAVE_SOCKADDR_STORAGE -DHAVE_SIN_LEN -DINET6 -g -O2 -pipe -fno-common -DENABLE_IPV6 conftest.c -L"/Users/rich/build/ruby" -L"/usr/local/lib" -lruby-static -ldl -lobjc " checked program was: /* begin */ #include <sys/types.h> #include <netdb.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> #ifndef AF_LOCAL #define AF_LOCAL AF_UNIX #endif main() { int passive, gaierr, inet4 = 0, inet6 = 0; struct addrinfo hints, *ai, *aitop; char straddr[INET6_ADDRSTRLEN], strport[16]; for (passive = 0; passive <= 1; passive++) { memset(&hints, 0, sizeof(hints)); hints.ai_family = AF_UNSPEC; hints.ai_protocol = IPPROTO_TCP; hints.ai_flags = passive ? AI_PASSIVE : 0; hints.ai_socktype = SOCK_STREAM; if ((gaierr = getaddrinfo(NULL, "54321", &hints, &aitop)) != 0) { (void)gai_strerror(gaierr); goto bad; } for (ai = aitop; ai; ai = ai->ai_next) { if (ai->ai_family == AF_LOCAL) continue; if (ai->ai_addr == NULL || ai->ai_addrlen == 0 || getnameinfo(ai->ai_addr, ai->ai_addrlen, straddr, sizeof(straddr), strport, sizeof(strport), NI_NUMERICHOST|NI_NUMERICSERV) != 0) { goto bad; } if (strcmp(strport, "54321") != 0) { goto bad; } switch (ai->ai_family) { case AF_INET: if (passive) { if (strcmp(straddr, "0.0.0.0") != 0) { goto bad; } } else { if (strcmp(straddr, "127.0.0.1") != 0) { goto bad; } } inet4++; break; case AF_INET6: if (passive) { if (strcmp(straddr, "::") != 0) { goto bad; } } else { if (strcmp(straddr, "::1") != 0) { goto bad; } } inet6++; break; case AF_UNSPEC: goto bad; break; default: /* another family support? */ break; } } } if (!(inet4 == 0 || inet4 == 2)) goto bad; if (!(inet6 == 0 || inet6 == 2)) goto bad; if (aitop) freeaddrinfo(aitop); exit(0); bad: if (aitop) freeaddrinfo(aitop); exit(1); } /* end */ ./conftest have_func: checking for getaddrinfo()... -------------------- yes "gcc -o conftest -I/Users/rich/build/ruby -I/Users/rich/build/ruby -DHAVE_SA_LEN -DHAVE_SOCKADDR_STORAGE -DHAVE_SIN_LEN -DINET6 -g -O2 -pipe -fno-common -DENABLE_IPV6 conftest.c -L"/Users/rich/build/ruby" -L"/usr/local/lib" -lruby-static -ldl -lobjc " conftest.c: In function `t': conftest.c:5: error: too few arguments to function `getaddrinfo' checked program was: /* begin */ #include <netdb.h> /*top*/ int main() { return 0; } int t() { getaddrinfo(); return 0; } /* end */ "gcc -o conftest -I/Users/rich/build/ruby -I/Users/rich/build/ruby -DHAVE_SA_LEN -DHAVE_SOCKADDR_STORAGE -DHAVE_SIN_LEN -DINET6 -g -O2 -pipe -fno-common -DENABLE_IPV6 conftest.c -L"/Users/rich/build/ruby" -L"/usr/local/lib" -lruby-static -ldl -lobjc " checked program was: /* begin */ #include <netdb.h> /*top*/ int main() { return 0; } int t() { void ((*volatile p)()); p = (void ((*)()))getaddrinfo; return 0; } /* end */ -------------------- have_func: checking for getnameinfo()... -------------------- yes "gcc -o conftest -I/Users/rich/build/ruby -I/Users/rich/build/ruby -DHAVE_SA_LEN -DHAVE_SOCKADDR_STORAGE -DHAVE_SIN_LEN -DINET6 -g -O2 -pipe -fno-common -DENABLE_IPV6 conftest.c -L"/Users/rich/build/ruby" -L"/usr/local/lib" -lruby-static -ldl -lobjc " conftest.c: In function `t': conftest.c:5: error: too few arguments to function `getnameinfo' checked program was: /* begin */ #include <netdb.h> /*top*/ int main() { return 0; } int t() { getnameinfo(); return 0; } /* end */ "gcc -o conftest -I/Users/rich/build/ruby -I/Users/rich/build/ruby -DHAVE_SA_LEN -DHAVE_SOCKADDR_STORAGE -DHAVE_SIN_LEN -DINET6 -g -O2 -pipe -fno-common -DENABLE_IPV6 conftest.c -L"/Users/rich/build/ruby" -L"/usr/local/lib" -lruby-static -ldl -lobjc " checked program was: /* begin */ #include <netdb.h> /*top*/ int main() { return 0; } int t() { void ((*volatile p)()); p = (void ((*)()))getnameinfo; return 0; } /* end */ -------------------- "gcc -o conftest -I/Users/rich/build/ruby -I/Users/rich/build/ruby -DHAVE_GETADDRINFO -DHAVE_SA_LEN -DHAVE_SOCKADDR_STORAGE -DHAVE_SIN_LEN -DINET6 -g -O2 -pipe -fno-common -DENABLE_IPV6 conftest.c -L"/Users/rich/build/ruby" -L"/usr/local/lib" -lruby-static -ldl -lobjc " checked program was: /* begin */ #include <sys/types.h> #include <netdb.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> int main() { socklen_t len; return 0; } /* end */ have_header: checking for sys/un.h... -------------------- yes "gcc -E -I/Users/rich/build/ruby -I/Users/rich/build/ruby -DHAVE_GETADDRINFO -DHAVE_SA_LEN -DHAVE_SOCKADDR_STORAGE -DHAVE_SIN_LEN -DINET6 -g -O2 -pipe -fno-common -DENABLE_IPV6 conftest.c -o conftest.i" checked program was: /* begin */ #include <sys/un.h> /* end */ -------------------- have_header: checking for sys/uio.h... -------------------- yes "gcc -E -I/Users/rich/build/ruby -I/Users/rich/build/ruby -DHAVE_GETADDRINFO -DHAVE_SA_LEN -DHAVE_SOCKADDR_STORAGE -DHAVE_SIN_LEN -DINET6 -g -O2 -pipe -fno-common -DENABLE_IPV6 conftest.c -o conftest.i" checked program was: /* begin */ #include <sys/uio.h> /* end */ -------------------- have_func: checking for socket()... -------------------- yes "gcc -o conftest -I/Users/rich/build/ruby -I/Users/rich/build/ruby -DHAVE_GETADDRINFO -DHAVE_SA_LEN -DHAVE_SOCKADDR_STORAGE -DHAVE_SIN_LEN -DINET6 -g -O2 -pipe -fno-common -DENABLE_IPV6 conftest.c -L"/Users/rich/build/ruby" -L"/usr/local/lib" -lruby-static -ldl -lobjc " checked program was: /* begin */ /*top*/ int main() { return 0; } int t() { socket(); return 0; } /* end */ -------------------- have_func: checking for hsterror()... -------------------- no "gcc -o conftest -I/Users/rich/build/ruby -I/Users/rich/build/ruby -DHAVE_GETADDRINFO -DHAVE_SA_LEN -DHAVE_SOCKADDR_STORAGE -DHAVE_SIN_LEN -DINET6 -g -O2 -pipe -fno-common -DENABLE_IPV6 conftest.c -L"/Users/rich/build/ruby" -L"/usr/local/lib" -lruby-static -ldl -lobjc " ld: Undefined symbols: _hsterror checked program was: /* begin */ /*top*/ int main() { return 0; } int t() { hsterror(); return 0; } /* end */ "gcc -o conftest -I/Users/rich/build/ruby -I/Users/rich/build/ruby -DHAVE_GETADDRINFO -DHAVE_SA_LEN -DHAVE_SOCKADDR_STORAGE -DHAVE_SIN_LEN -DINET6 -g -O2 -pipe -fno-common -DENABLE_IPV6 conftest.c -L"/Users/rich/build/ruby" -L"/usr/local/lib" -lruby-static -ldl -lobjc " conftest.c: In function `t': conftest.c:5: error: `hsterror' undeclared (first use in this function) conftest.c:5: error: (Each undeclared identifier is reported only once conftest.c:5: error: for each function it appears in.) checked program was: /* begin */ /*top*/ int main() { return 0; } int t() { void ((*volatile p)()); p = (void ((*)()))hsterror; return 0; } /* end */ -------------------- have_func: checking for getipnodebyname()... -------------------- yes "gcc -o conftest -I/Users/rich/build/ruby -I/Users/rich/build/ruby -DHAVE_GETADDRINFO -DHAVE_SA_LEN -DHAVE_SOCKADDR_STORAGE -DHAVE_SIN_LEN -DINET6 -g -O2 -pipe -fno-common -DENABLE_IPV6 conftest.c -L"/Users/rich/build/ruby" -L"/usr/local/lib" -lruby-static -ldl -lobjc " checked program was: /* begin */ /*top*/ int main() { return 0; } int t() { getipnodebyname(); return 0; } /* end */ -------------------- have_func: checking for gethostname()... -------------------- yes "gcc -o conftest -I/Users/rich/build/ruby -I/Users/rich/build/ruby -DHAVE_GETADDRINFO -DHAVE_SA_LEN -DHAVE_SOCKADDR_STORAGE -DHAVE_SIN_LEN -DINET6 -g -O2 -pipe -fno-common -DENABLE_IPV6 conftest.c -L"/Users/rich/build/ruby" -L"/usr/local/lib" -lruby-static -ldl -lobjc " checked program was: /* begin */ /*top*/ int main() { return 0; } int t() { gethostname(); return 0; } /* end */ --------------------