vine-users ML アーカイブ



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

  • From: ISE Kotaro <kotaro@xxxxxxxxxxxxx>
  • Subject: [vine-users:057262] Re: マルチスレッド下の gethostbyname() について
  • Date: Mon, 30 Dec 2002 08:29:30 +0900 (JST)
伊瀬です。

文面からは以下のどちらが問題なのか読み取りずらく、混乱した返答になって
いるかもしれませんが、ご容赦ください。
  gethostbyname()を使うとメモリリークする
  gethostbyname()を使うとメモリ使用量が大きい


メモリリークに関して:
  添付のプログラムをうごかしてみました。私の環境ではリークしていない
  ようです。(10000回程呼んでもメモリ使用量は増えない)

メモリ使用量が大きいことに関して:
  #if 0 / #if 1を変えることによりサイズは増減しますが、使っている関数
  が異なるので、許容範囲内のようにおもいます。

  もし、メモリ的にこの使用量が大きすぎるようでしたら、所望の関数を自作
  するか、gethostbyname()を呼んだスレッドを捨てることで解決できそうな
  気がします。


以上、お役に立てば幸です。


> 早速で申し訳ないのですが、gethostbyname()にてメモリリークが発生し、
> 解消方法が分かりません。 

(省略)

> また、確認方法として
> 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>
> 
>