え〜、FreeBSDでは、gethostby* は libc に入ってますので、 gethostbyaddr のソースは http://www.freebsd.org/cgi/cvsweb.cgi/src/lib/libc/net/gethostnamadr.c?rev=1.10.2.1 ここらへんです。/etc/hostsなどを見て、見付からなかったらDNS引きに いきますが、それを担当するのは http://www.freebsd.org/cgi/cvsweb.cgi/src/lib/libc/net/gethostnamadr.c?rev=1.10.2.1 の struct hostent * _gethostbydnsname(addr, len, af) あたりでしょうか。で、そこらへんの絡みで、 static struct hostent * gethostanswer(answer, anslen, qname, qtype) が呼ばれますが、そこで host.h_aliases = host_aliases; host.h_addr_list = h_addr_ptrs; といったことをしています。で、host_aliases や h_addr_ptrs は gethostnamaddr.cの先頭で static char *h_addr_ptrs[MAXADDRS + 1]; static struct hostent host; static char *host_aliases[MAXALIASES]; static char hostbuf[8*1024]; などと定義されいます。ちなみに #define MAXALIASES 35 #define MAXADDRS 35 です。 > これらがすべて静的領域に確保されているとは考え難いと思います。 というわけで、全て static で宣言されているようですね。当然ですが if (hap >= &h_addr_ptrs[MAXADDRS-1]) { if (!toobig++) dprintf("Too many addresses (%d)\n",MAXADDRS); エラーチェックもしています。 > 先日某所で尋ねられた件について、ちょっと分からなかったので、 > 質問させて下さい。 もしよろしければ、その話題が出たのはどこなのか教えていただけますか? こういう楽しい話題が出るところに参加したいもので。 |