2009-03-13 8 views
1

私は通常の方法でのgethostbyname()関数を使用しています...のgethostbyname Win32エラー

iaHost.s_addr = inet_addr(lpServerName); 
if (iaHost.s_addr == INADDR_NONE) 
{ 
    // Wasn't an IP address string, assume it is a name 
    lpHostEntry = 0; 
    lpHostEntry = gethostbyname(lpServerName); 
} 

は、私のWebサイトにアクセスして情報を返します。変数「lpServerName」には、「google.com」やループバック「127.0.0.1」などの任意のホストを使用できます。

私のシステム:AMD Opteronシステムで動作しているWindows x64またはx32(同じエラーは発生しません)、XAMPPは私のマシン上にあり、デバッグの目的で使用します。

ここに問題があります:ループバックアドレスを使用すると、上のコードは正常に動作します。私が試してみると、コンピュータの外部のWebサイトにアクセスすると、次のようなエラーが表示されます。「test_gethostbyname.exeにWindowsがブレークポイントを引き起こしました。これはヒープの破損によるもので、test_gethostbyname.exeやその他ロードされたDLLのうち、より多くの診断情報が出力されることがあります。プログラム "test_gethostbyname.exe"には、インターネットへのアクセスに適用されるもっと大きなプロジェクトのコード部分しか含まれていません。したがって、私はヒープが私が行ったことによって壊れているとは思わない。私は同じ結果で "getaddrinfo"コマンドを試しました。私は喜んで(UNIXシステムのセグメンテーションフォールト以外の)この問題に関するあらゆる種類の情報をWebで検索しました。

誰でも、このエラーが発生する原因となるこのコマンドの問題を知っていますか?事前に

おかげで、

ジェイ

+0

IPアドレスとドメイン名の両方を試しましたか? – Paxic

+0

はい、無駄です。 – jay

答えて

0

私は答えを見つけました。問題は私のXPシステム上のライブラリのようです。前にも触れましたが、問題なく他のXPシステムでプログラムをコンパイルしました。私はWindows 7とVisual C++ 8 expressを使って私の開発システム上でシステムをコンパイルしていました。

0

はlpServerNameです:

  • NULLは
  • NULLがすでに

私の推測では、それはだということでしょう削除終了していませんNULLは終了しません。

おそらく、inet_addrはNULL終了を認識しなくても停止するので、通常のIPドットストリングを使用すると動作します。

1

私はあなたがINADDR_NONEのチェックが、何についての他のどのような文字列を使用すると、()をのgethostbynameするために渡している

http://msdn.microsoft.com/en-us/library/ms738563(VS.85).aspx

状態INADDR_ANYに失敗している参照してください?確かに、lpServerNameの形式に問題があります。

0

文字列がヌル終了していて、エラーがなくなっていないかどうかを確認しました。私がコンパイルした例は、gethostname()のMicrosoftの記述からですが、これは機能上正しいと思いますが、まだエラーが出ます。

今朝、Visual C++のExpressバージョンを使用している別のマシンでサンプルを再コンパイルしましたが、エラーは発生しません。したがって、開発マシンのライブラリライブラリに問題がある可能性があるので、コンパイラとプラットフォームSDKを再インストールして問題が解決するかどうか確認します。

関連する問題