IPv4 または IPv6 の文字列表現 (「66.102.1.147」[google] など) をバイナリ ネットワーク バイト順の形式に変換する「inet_pton」という関数を実装しようとしています。私のコードの関連部分は次のとおりです。
#if defined WIN32
int inet_pton (int af, const char *src, void *dst)
{
const void *data;
size_t len;
struct addrinfo hints, *res;
hints.ai_family = af;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_UDP;
hints.ai_flags = AI_NUMERICHOST;
if (getaddrinfo (src, NULL, &hints, &res))
{
std::cout << "ERROR : inet_pton() in " << __FILE__ << " at line " << __LINE__ << std::endl;
std::cout << " : getaddrinfo() failed to get IP address info for \"" << src << "\"" << std::endl;
return 0;
}
...
したがって、src は着信 IP 文字列です。ただし、常に次のようなエラーが発生します
getaddrinfo() は「66.102.1.147」の IP アドレス情報を取得できませんでした
Winsock の経験がある人はコメントできますか? 別の方法、関数も試しました
WSAStringToAddress ((LPTSTR)src, af, NULL, (LPSOCKADDR) &sa, &address_length)
ただし、無効な IP 文字列を示すエラー コード WSAEINVAL が常に返されます。これは私には意味がありません。IDE として VS2005 を使用しています。