2017-12-14 2 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

Willkommen bei stackoverflow.com. Bitte nehmen Sie sich etwas Zeit, [die Hilfeseiten] (http://stackoverflow.com/help) zu lesen, besonders die Abschnitte mit dem Namen ["Welche Themen kann ich hier fragen?"] (Http://stackoverflow.com/help/) on-topic) und ["Welche Art von Fragen sollte ich vermeiden zu fragen?"] (http://stackoverflow.com/help/dont-ask). Auch bitte [nehmen Sie die Tour] (http://stackoverflow.com/tour) und [lesen Sie, wie man gute Fragen stellt] (http://stackoverflow.com/help/how-to-ask). Schließlich erfahren Sie, wie Sie ein [minimales, ** vollständiges ** und überprüfbares Beispiel] (http://stackoverflow.com/help/mcve) erstellen können. –

+0

Schauen Sie [hier] (https://stackoverflow.com/questions/8835322/api-using-sockaddr-storage) und [hier] (http://www.tenouk.com/Winsock/Winsock2example7.html) –

Antwort

2

Um mit sowohl IPv4 und IPv6 zu arbeiten Verkehr mit einer einzigen Steckdose, müssen Sie einen Dual-Stack erstellen Socket, das ist ein IPv6-Socket, bei dem die Option IPV6_V6ONLY deaktiviert ist.

Siehe MSDN-Dokumentation für weitere Informationen:

Dual-Stack Sockets for IPv6 Winsock Applications

Um sowohl IPv4 als auch IPv6 unter Windows XP mit Service Pack 1 (SP1) und Windows Server 2003, eine Anwendung zu unterstützen, hat um zwei Sockets zu erstellen, einen Socket zur Verwendung mit IPv4 und einen Socket zur Verwendung mit IPv6. Diese beiden Sockets müssen von der Anwendung getrennt behandelt werden.

Windows Vista und höher bieten die Möglichkeit, einen einzelnen IPv6-Socket zu erstellen, der sowohl IPv6- als auch IPv4-Datenverkehr verarbeiten kann. Beispielsweise wird ein TCP-Abhörsockel für IPv6 erstellt, in den Dual-Stack-Modus versetzt und an Port 5001 gebunden. Dieser Dual-Stack-Socket kann Verbindungen von IPv6-TCP-Clients mit Port 5001 und von IPv4-TCP-Clients mit Port 5001 akzeptieren. Diese Funktion ermöglicht einen stark vereinfachten Anwendungsentwurf und reduziert den Ressourcenaufwand, der für die Buchung von Operationen auf zwei separaten Sockets erforderlich ist.

Verwandte Themen