2017-12-14 14 views
0
int m_nSocket6; 
sockaddr_in6 m_address_6; 

/*created the socket*/ 

m_nSocket6 = socket(AF_INET6, SOCK_DGRAM, 0); 

int ret; 
/* Set socket buffer size */ 

    int buffer_size; 

    ret = setsockopt(m_nSocket, SOL_SOCKET, SO_RCVBUF, (char*) &buffer_size, sizeof(buffer_size)); 

/* Set socket timeout */ 

    int timeout = m_nTimeout; 
    ret = setsockopt(m_nSocket, SOL_SOCKET, SO_RCVTIMEO, (char*) &timeout, sizeof(timeout)); 

/*Multicast*/ 

int yes = m_nMulticast; //1 = enabled 
    ret = setsockopt(m_nSocket, SOL_SOCKET, SO_REUSEADDR, (char*)&yes, sizeof(yes)); 

/*bind*/ 

    memset((char *)&abc, 0, sizeof(m_address6)); 
    m_address6.ss_family = AF_UNSPEC; 
    m_address6.sin6_family = AF_INET6; 
    m_address_6.sin6_addr = in6addr_any; 
    m_address6.sin6_port = htons((u_short)m_nPort); 
    ret = bind(m_nSocket6, (struct sockaddr*) &abc, sizeof(abc)); 

/*receiving the packets*/ 

recvfrom(m_nSocket, m_sBuffer, UPD_DATAGRAM_BUFFER_SIZE, 0, (struct sockaddr*) &m_address, &server_length); 
+3

ようこそstackoverflow.com [ヘルプページ](http://stackoverflow.com/help)、特に[ここではどのトピックを聞くことができますか?](http://stackoverflow.com/help/)のセクションを読んでください。 on-topic)と[[どのような種類の質問を避けるべきですか?]](http://stackoverflow.com/help/dont-ask)を参照してください。また、[ツアーを受けてください](http://stackoverflow.com/tour)と[良い質問をする方法を読む](http://stackoverflow.com/help/how-to-ask)もご覧ください。最後に[最小、**完全**、および検証可能な例](http://stackoverflow.com/help/mcve)の作成方法を学んでください。 –

+0

[here](https://stackoverflow.com/questions/8835322/api-using-sockaddr-storage)と[here](http://www.tenouk.com/Winsock/Winsock2example7.html)を参照してください。 –

答えて

2

に取り組んでいた、あなたはデュアルスタックを作成する必要がありますソケットは、IPV6_V6ONLYオプションが無効になっているIPv6ソケットです。

詳細については、MSDNのドキュメントを参照してください:

Dual-Stack Sockets for IPv6 Winsock ApplicationsのService Pack 1(SP1)とWindows XP上でIPv4とIPv6の両方をサポートするために

およびWindows Server 2003上で、アプリケーションが持っています2つのソケットを作成します.1つはIPv4で使用するソケットで、もう1つはIPv6で使用するソケットです。これらの2つのソケットは、アプリケーションによって個別に処理する必要があります。

Windows Vista以降では、IPv6とIPv4の両方のトラフィックを処理できる単一のIPv6ソケットを作成できます。たとえば、IPv6のTCPリスニングソケットが作成され、デュアルスタックモードになり、ポート5001にバインドされます。このデュアルスタックソケットは、ポート5001に接続するIPv6 TCPクライアントとポート5001に接続するIPv4 TCPクライアントからの接続を受け入れることができます。この機能により、大幅に単純化されたアプリケーション設計が可能になり、2つの独立したソケットでのポスティング操作に必要なリソースのオーバーヘッドが削減されます。

関連する問題