Эффективный способ обработки соединений с несколькими сайтами? - PullRequest
0 голосов
/ 11 июля 2019

Я написал приложение, которое отправляет некоторые файлы на несколько сайтов.Если некоторые сайты не работают, то как мне справиться с подключением.Должен ли я просто отбросить сайты (проще) или попытаться повторно подключиться к ним через определенный промежуток времени и в течение определенного фиксированного числа раз (я считаю правильным).

Я уже написал заявки наПоддержка отправки и получения файлов.В следующем коде

    //I have added one more loop to process all the configured sites.
    int socketHandle = 0;
    struct addrinfo ipList, *listHead = nullptr, *listElement = nullptr;

    cout << "Trying to connect to " << serverName << " on port " << serverPort << endl;

    memset(&ipList, '\0', sizeof(struct addrinfo));

    ipList.ai_family = AF_UNSPEC;
    ipList.ai_socktype = SOCK_STREAM;
    ipList.ai_protocol = IPPROTO_TCP;

    if((socketHandle = getaddrinfo(serverName, serverPort, &ipList, &listElement)) != 0)
    {
        cout << "getaddrinfo error for " << serverName << " " << serverPort << " " << gai_strerror(socketHandle) << endl;
    }

    listHead = listElement;

    bool bConnected = false;
    int nLastError = 0;
    do{

        m_nSocketHandle = socket(listElement->ai_family, listElement->ai_socktype, listElement->ai_protocol);
        if(m_nSocketHandle == 0)
        {
            continue;
        }

        nLastError = connect(m_nSocketHandle, listElement->ai_addr, listElement->ai_addrlen);
        if(nLastError == 0)
        {
            bConnected = true;
            break;
        }

        nLastError = GetLastError();

        close(m_nSocketHandle);
        m_nSocketHandle = 0;

    }while ((listElement = listElement->ai_next) != NULL);

    freeaddrinfo(listHead);/*It loops over and frees the whole list*/

Мой вопрос просто с точки зрения дизайна.Было бы полезно, если бы кто-то мог выразить свои мысли и предложить свое понимание.Это мой один из самых первых вопросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...