68user's page 掲示板

Prev< No. 231> Next  [最新発言に戻る] [過去ログ一覧]
No. 231 # 68user 1999/03/26 (金) 03:12
え〜、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);
エラーチェックもしています。

> 先日某所で尋ねられた件について、ちょっと分からなかったので、
> 質問させて下さい。
もしよろしければ、その話題が出たのはどこなのか教えていただけますか?
こういう楽しい話題が出るところに参加したいもので。

Prev< No. 231> Next  [最新発言に戻る] [過去ログ一覧]