c ++ - Directed UDP til IP-adresse, der ikke findes

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg oplever afmatninger, når jeg forsøger at sende en UDP-besked til en IP-adresse, der ikke eksisterer. Vi læser en liste over IP/porte ud af en konfigurationsfil og forventer, at disse kombinationer vil eksistere. I nogle tilfælde er fjernmaskinen muligvis ikke online, og IP'en eksisterer ikke på netværket. I dette tilfælde foretrækker jeg, at vi ikke forsøger at sende dataene.


Jeg søger efter forslag på en god måde at afgøre, at IP ikke eksisterer for at springe over at sende dataene. Jeg vil ikke helt fjerne den fra listen, fordi der er en chance for, at maskinen kan komme online, og jeg vil gerne fortsætte med at sende data.


Relevant kode:


int SendData(const char *data, int size, bool openIfClosed)
    {
        std::lock\_guard<std::mutex> lock(sendMutex);        

        //if the socket was not already opened, close it after i do my send
        bool closeAfterSend = mySocket == INVALID\_SOCKET ? true : false;

        if (!OpenSocket(openIfClosed))                              
            return 0;

        sockaddr\_in address;
        address.sin\_family = AF\_INET;
        address.sin\_port = htons(remotePort);
        address.sin\_addr.s\_addr = remoteIPAddress.GetIPAddressAsULong();             

        //check if remote address exists prior to send?
        int bytesSent = sendto(mySocket, data, 
                        size, 0, (struct sockaddr *)&address, sizeof(address));
        if (bytesSent == size)
            numMsgsOut++;
        else
        {
           //fail
        }


        if (closeAfterSend && openIfClosed)
        {
            closesocket(mySocket);
            mySocket = INVALID\_SOCKET;
        }

        return bytesSent;
    }

Bedste reference