こんにちは、いつも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>