vine-users ML アーカイブ



[vine-users:057188] マルチスレッド下の gethostbyname() について

  • From: 近藤 正博 <echo@xxxxxxxxxxxxxxx>
  • Subject: [vine-users:057188] マルチスレッド下の gethostbyname() について
  • Date: Fri, 27 Dec 2002 12:19:16 +0900
こんにちは、いつもROMばかりの近藤といいます。

早速で申し訳ないのですが、gethostbyname()にてメモリリークが発生し、
解消方法が分かりません。 
 gethostbyname()とinet_ntoa()
で発生しているように見受けられます。これらの関数は、関数
内でallocしているらしく、これがfreeできない(されない)ようです。
しかし、現状ではこれらの関数を使わないということができず、逃げ道が
無い状態です。getaddrinfo()という関数があるのですが、
これも何かしら残ってしまうようです・・・。

また、確認方法として
struct in_addr addr;
#if 0
    if((servhost = gethostbyname(host)) == NULL){
        unsigned long addr;
        addr = inet_addr(host);
        // サーバのアドレスからサーバのアドレスを設定
        servhost = gethostbyaddr((char *) &addr, sizeof(addr), AF_INET);
        if(servhost == NULL){
            return(-1);
        }
    }
    memcpy((char *)&server.sin_addr, servhost->h_addr, servhost->h_length);
#else
    if( !inet_aton( host, &addr ) ){
        return -1;
    }
    memcpy((char *)&server.sin_addr, &addr, sizeof( struct in_addr ));
#endif
とし、リクエストのURLをIP指定でメモリーの状況を確認した
ところ、ほとんど増えないんです・・・やはりネックはこの
関数か?これだけでかなりメモリーの使用量が減りました。

以上、どなたか解決方法をご存知でしたらお願い致します。

-- 
近藤 正博 <echo@xxxxxxxxxxxxxxx>