一部のコードを 32 ビット Windows (XP および Server 2003) から 64 ビット Windows 7 に移行しようとしていますが、gethostbyname で奇妙な問題が発生しています。
私はこのようなことをしています:
struct hostent *hp;
hp = gethostbyname( host );
gethostbyname の呼び出し後、ポインター hp->h_addr_list が無効になります。数値はすべて正しいのですが、32 ビット ポインターが何らかの形で間違ったスペースに詰め込まれたようです。
たとえば、私が得るものは
hp->h_addr_list = 0x0064bdd800000000
hp->h_addr_list = 0x000000000064bdd8 となるように前半と後半を手動で交換すると、ポインターは有効になり、正しいデータを指します。
ゼロの代わりに baadf00d を取得することもあります (つまり、hp->h_addr_list = 0x0064bdd8baadf00d)。
私が知る限り、すべてが正しい 64 ビット バージョンの winsock ライブラリにリンクされているため、この種の問題の原因はわかりません。