2017-12-14 1 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). 마지막으로 [Minimal, ** Complete ** 및 Verifiable Example] (http://stackoverflow.com/help/mcve)를 만드는 방법을 배우십시오. –

+0

[여기] (https://stackoverflow.com/questions/8835322/api-using-sockaddr-storage) 및 [여기] (http://www.tenouk.com/Winsock/Winsock2example7.html)를보십시오. –

답변

2

단일 소켓 모두 IPv4 및 IPv6 트래픽, 당신은 듀얼 스택을 만들어야합니다 를 사용하기 위해서 리눅스에서 일하고 있었다 소켓IPV6_V6ONLY 옵션이 비활성화 된 IPv6 소켓입니다.

자세한 내용은 MSDN 문서를 참조하십시오 :

Dual-Stack Sockets for IPv6 Winsock Applications 서비스 팩 1 (SP1) Windows XP에서 IPv4와 IPv6 모두를 지원하기 위해

및 Windows Server 2003에서, 응용 프로그램이 두 개의 소켓, IPv4와 함께 사용하기위한 하나의 소켓 및 IPv6과 함께 사용하기위한 하나의 소켓을 만듭니다. 이 두 소켓은 응용 프로그램에서 개별적으로 처리해야합니다.

Windows Vista 이상에서는 IPv6 및 IPv4 트래픽을 모두 처리 할 수있는 단일 IPv6 소켓을 만들 수 있습니다.. 예를 들어, IPv6 용 TCP 수신 대기 소켓이 만들어지고 이중 스택 모드로 전환되어 포트 5001에 바인딩됩니다.이 이중 스택 소켓은 포트 5001에 연결하는 IPv6 TCP 클라이언트와 포트 5001에 연결하는 IPv4 TCP 클라이언트의 연결을 허용 할 수 있습니다. 이 기능을 사용하면 크게 단순화 된 응용 프로그램 설계가 가능하며 두 개의 개별 소켓에서 게시 작업에 필요한 자원 오버 헤드를 줄일 수 있습니다.

관련 문제