getaddrinfo関数はホスト名からアドレスへの変換を提供する、プロトコルより独立したANSIバージョンの関数です。
もし2つ以上の名前空間提供情報が戻されるならば、getaddrinfo関数は全てのレスポンスに集計します。
IPv6とIPv4プロトコルを共に使用する為に、
名前レゾリューションはDomain Name System(DNS)により出来ます、
ローカルhostsファイル、
または、他のネイミング・メカニズムによって。
getaddrinfo関数の為に使用可能なもう一つの名前はGetAddrInfoAです。
Ws2tcpip.hヘッダファイルのマクロにはGetAddrInfoAからgetaddrinfoへの定義がされています。
こちらの関数のそのUnicodeバージョンはGetAddrInfoWです。
Ws2tcpip.hヘッダファイルのマクロは、GetAddrInfoとADDRINFOT構造体のミックスド・ケース関数名を定義しています。
このGetAddrInfo関数は、ADDRINFOT型のポインタのTCHAR型とそのhintsとresパラメタのポインタのnodenameとservnameパラメタと共に、呼ばれなければなりません。
UNICODEまたは_UNICODEが定義されていない時、
GetAddrInfoはgetaddrinfoとして定義されています、
関数のANSIバージョンです、
そして、ADDRINFOTはそのaddrinfo構造体として定義されています。
UNICODEまたは_UNICODEが定義されている時、
GetAddrInfoはGetAddrInfoWとして定義されています、
関数のUnicodeバージョンです、
そして、ADDRINFOTはaddrinfoW構造体として定義されています。
nodenameまたはservnameパラメタの一方または両方は、'\0'で終わるANSI文字列へのポイントでなければなりません;
通常、両方とも提供されます。
成功に、
addrinfo構造体のリンクドリストはresパラメタへと戻されます。
addrinfo構造体のリンクドリストに対する処理は、addrinfo構造体のai_nextメンバを使って、NULLポインタが現れるまでの間、繰り返し処理する事が出来ます。
ai_nextはポインタとして後続のデータを示す。
各々の戻されたaddrinfo構造体、ai_family、 ai_socktype、 そして、ai_protocolメンバにて、
ソケットまたはWSASocket関数より出しにおいて引数それぞれについて一致させて下さい。
また、
filled-inするソケット・アドレス構造体へのaddrinfo構造体ポイントを各々に戻された中のai_addrメンバ、
それの長さはそのai_addrlenメンバによって指定されます。
もしnodenameがコンピュータ名であるならば、コンピュータのための永続するアドレスは戻されます。
もしnodenameが文字列 "..localmachine" または "localhost"を含むならば、
全ての登録されているアドレスは戻されます。
もしnodenameがクラスタ・バーチャル・サーバ・ネームに当てはまるならば、仮想サーバ・アドレスだけが戻されます。
クラスタリングに付いての追加情報については、Windows Clusteringを調べて下さい。
getaddrinfo関数の呼び出し者は、hintsパラメタによって指されるaddrinfo構造体を通してサポートされるソケットのタイプについてのヒントを提供する事が出来ます。
hintsパラメタ使用時に、
その以下のルールはaddrinfo構造体関連に適用します:
-
呼び出し者によって、ai_familyにAF_UNSPECが指定されると、プロトコルファミリィの(IPv4、IPv6)のいずれも受け入れる事を示します。
ノート AF_UNSPECとPF_UNSPECは同じです。
-
呼び出し者によって、ai_socktypeにゼロが指定されると、いくつかのソケットタイプを受け入れる事を示します。
-
呼び出し者によって、ai_protocolにゼロが指定されると、いくつかのプロトコルを受け入れる事を示します。
-
そのai_addrlenメンバにはゼロをセットしなければなりません。
-
そのai_canonnameメンバにはNULLをセットしなければなりません。
-
そのai_addrメンバにはNULLをセットしなければなりません。
-
そのai_nextメンバにはNULLをセットしなければなりません。
hintsパラメタにて提供されるaddrinfo構造体のその他の値は、要求仕様を示します。
たとえば、
呼び出し者がIPv4だけを取り扱ってIPv6を取り扱わないならば、
ai_familyメンバーにはAF_INETをセットしなければなりません。
For another example,
たとえば、
呼び出し者がTCPだけを取り扱ってUDPを取り扱わないならば、
ai_socktypeメンバーにはSOCK_STREAMをセットしなければなりません。
もしhintsパラメタがNULLポインタであるならば、
hintsパラメタは初期値として、addrinfo構造体がゼロにセットされ、ai_familyメンバにAF_UNSPEC、その他のメンバはゼロとして、getaddrinfo関数に扱われます。
Windows Vista上にてgetaddrinfoがサービスから呼び出された後に、
もしそのオペレーションがユーザプロセスのサービス呼び出した結果であるならば、
サービスはユーザの役を演じなければなりません。
これは、セキュリティとルーティング区画を適切に実施する事を許します。
|