2016-09-13 1 views
0
私は、MSDNの「 Getting Started With Winsock」を通じてつもりです

対行うと、彼らはパラメータC++ - > ai_familyがAF_INET

struct addrinfo *result = NULL, 
       *ptr = NULL, 
       hints; 

iResult = getaddrinfo(
     argv[1], 
     DEFAULT_PORT, 
     &hints, 
     &result 
); 

ptr=result; 

ConnectSocket = socket(
     ptr->ai_family,     // Address Family (address families like ipv6 ipv4) 
     ptr->ai_socktype,    // Type (Like tcp, udp ect) 
     ptr->ai_protocol    // Protocol to use (0 = service provider chooses) 
    ); 

しかしbinarytides「Winsock tutorial」でソケットを開きます(このようにそれをしない彼らはptr-何を使用していません私はC++でこれをやっているのを見てきました)

s = socket(
    AF_INET , 
    SOCK_STREAM , 
    0 
) 

ptr->は何ですか? なぜそれをAF_INETのように設定するだけで使用できますか?

また、空き時間があり、ソケットをよく知っていれば、私はいくつかの助けに感謝します。

+0

あなたは 'ptr'が何と言うのが難しいかを示していませんでした。 –

+0

@SamKuhmonen aahhhはい、ただ編集しました。 –

答えて

2
socket(ptr->ai_family,ptr->ai_socktype, ptr->ai_protocol); 

は、値をハードコードする代わりに、ソケットを作成するために変数を渡します。利点は、コードがIPv4とIPv6の両方で機能することです。

ptr->ai_familyは、整数で、struct addrinfoのメンバーです。 (そして、あなたがptr->の特定の構文に疑問を抱いている場合、あなたはthis questionを通過することができます)、それはAF_INETAF_INET6(または、理論的にはサポートされている他のプロトコル)のいずれかの値を持つことになります

getaddrinfo()の呼び出しは検索しますホスト名をIPv4またはIPv6のいずれかに解決し、結果をsocket()に渡して、適切なタイプのソケットを作成します。ホスト名がIPv4ホストに解決された場合は、IPv4を処理できるソケットを作成します.IPv6に解決された場合は、IPv6ソケットを作成します。

代わりに値をハードコードするとします。 AF_INETとすると、ptr->ai_familyAF_INETまたはAF_INET6のいずれかになりますが、IPv4のみがサポートされます。

+0

ありがとう!それはとても分かりやすいです!これまでのところ、私はwinsock XDの主題に関するチュートリアルを理解しやすいものを見つけられませんでした。 –

関連する問題