locked
IPv6 UDP socket connection RRS feed

  • General discussion

  • I wrote something like this:

    SOCKET g_Socket = socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP); // IPPROTO_HOPOPTS

    if (g_Socket == INVALID_SOCKET) {
    MessageBoxW(0, L"socket error !", L_PROGRAM_NAME, 0);
    return 1;
    }

    int trueFlag = 0x1;
    if (setsockopt(g_Socket, SOL_SOCKET, SO_BROADCAST, (const char FAR*) & trueFlag, sizeof(trueFlag)) != 0) {
    MessageBoxW(0, L"set SO_BROADCAST error !", L_PROGRAM_NAME, 0);
    return 1;
    }

    setsockopt(g_Socket, IPPROTO_IPV6, IPV6_V6ONLY, (const char FAR*) & trueFlag, sizeof(trueFlag));

    long bufLen;
    bufLen = SOCKET_BUFFER_SIZE;
    iResult = setsockopt(g_Socket, SOL_SOCKET, SO_SNDBUF, (char*)&bufLen, sizeof(bufLen));

    bufLen = SOCKET_BUFFER_SIZE;
    iResult = setsockopt(g_Socket, SOL_SOCKET, SO_RCVBUF, (char*)&bufLen, sizeof(bufLen));

    BOOL bNewBehavior = FALSE;
    DWORD dwBytesReturned = 0;
    WSAIoctl(g_Socket, SIO_UDP_CONNRESET, &bNewBehavior, sizeof(bNewBehavior), NULL, 0, &dwBytesReturned, NULL, NULL);

    sockaddr_in6 DestAddr;
    memset(&DestAddr, 0, sizeof(DestAddr));
    DestAddr.sin6_family = AF_INET6;
    DestAddr.sin6_port = htons(CLIENT_PORT); // in6addr_any
    DestAddr.sin6_addr = in6addr_any;

    iResult = bind(g_Socket, (SOCKADDR*)&DestAddr, sizeof(DestAddr));

    if (iResult != 0) {
    MessageBoxW(0, L"Cant' bind socket !", L_PROGRAM_NAME, 0);
    return 1;
    }

    memset(&DestAddr, 0, sizeof(DestAddr) );
    DestAddr.sin6_family = AF_INET6;
    DestAddr.sin6_port = htons( SERVER_PORT );
    DestAddr.sin6_scope_id = 24;

    if (InetPtonW(AF_INET6, L"fe80::a549:ed77:39be:98ed", DestAddr.sin6_addr.s6_addr)!=1) {
    sprintf(szBuffer, "%u", WSAGetLastError());
    MessageBoxA(0, szBuffer, "InetPtonW error", 0);
    }

    int rv = sendto(g_Socket, (char*)message, len, 0, (SOCKADDR*)&DestAddr, sizeof(DestAddr) );

    if (rv == SOCKET_ERROR) {
    sprintf(szBuffer, "%u", WSAGetLastError());
    MessageBoxA(0, szBuffer, "sendto error", 0);
    }

    But after using the sendto function, I get error 10038 (WSAENOTSOCK). Why?
    • Edited by Squeak[PL] Saturday, September 5, 2020 8:33 PM
    Saturday, September 5, 2020 8:32 PM