SHOJI's Code
 仕事や趣味で書いた各種言語のプログラミングコード(エクセルVBA,PHP,C/C++/C#,JavaScript等)、その他雑記。
2017.08<<123456789101112131415161718192021222324252627282930>>2017.10
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

先日、仕事で私が書いたライブラリを使ったところ異常に時間がかかるという現象が起こったと報告を受けた。
そのライブラリはWinSockを使用して簡易的な通信をするためのライブラリであるのだが、調べてみると時間が掛かっている箇所は送信元のホスト名を調べる関数の中で起こっていることがわかった。以下のようなテストコードを書いて調べてみると、gethostbyaddr関数で数秒時間がかかる場合があることが判明。
main(int argc, char *argv[])
{
int i;
char ip[20];
DWORD t;
HOSTENT *h;
unsigned long addr;
WSADATA wsaData;

WSAStartup(0x0101, &wsaData);

strcpy(ip, argv[1]);
addr = inet_addr(ip);

printf("%s: ", ip);
t = GetTickCount();
if( ( h = gethostbyaddr((const char FAR *)&addr, 4, AF_INET)) != NULL )
printf("%s", h->h_name);
else
printf("(none)");
t = GetTickCount() - t;
printf(" %u msec\n", t);

WSACleanup();
}


IPアドレスを指定してホスト名解決にかかる時間を測定するものだが、キャッシュされるのか数十ミリ秒程度で済む場合もあれば、数秒かかる場合もある。一度解決すれば早い場合もあるし、何度も数秒かかる場合もある。hostsに書いてあれば早いこともわかった。
結局、仕事で書いたライブラリの方はhostsファイルに記述してもらって対応してもらった。

テーマ:プログラミング - ジャンル:コンピュータ
コメント
この記事へのコメント
コメントを投稿する

管理者にだけ表示を許可する
トラックバック
この記事のトラックバックURL
この記事へのトラックバック
copyright © 2004-2006 SHOJI, Powered By FC2ブログ all rights reserved.
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。