WinInet: Daten werden nicht immer empfangen

dadevelopa

Mitglied
Hallo zusammen,
ich habe ein Programm geschrieben welches einen HTTP-Request an einen Server via WinInet absetzt. Anschliessend möchte ich die empfangenen Daten auswerten.
Nun kommt es aber manchmal vor, dass der Server mir unter schwerer Last zwar die Daten schickt, ich sie jedoch nicht empfange.
Folgendes ist mein Code um die Verbindung aufzubauen:

Code:
int sendDataMessage(char *message, CONFIGURATION *config){
    char ch = NULL;
    Initialize = NULL;
    Connection = NULL;
    File = NULL;

    Initialize = InternetOpen(TEXT("Text Text"), INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
   
    if(Initialize == NULL){
        return 0;
    }

    Connection = InternetConnect(Initialize, TEXT(config->server), atoi(config->port),
    NULL,NULL,INTERNET_SERVICE_HTTP,0,0);

    if(Connection == NULL){
        return 0;
    }
    //check if port equals defined server ssl port
    if(strcmp(config->port, DEFINED_SSL_PORT) == 0){
        File = HttpOpenRequest(Connection,NULL,TEXT(message),
            NULL,NULL,NULL,
            INTERNET_FLAG_IGNORE_CERT_CN_INVALID |
            INTERNET_FLAG_IGNORE_CERT_DATE_INVALID |
            INTERNET_FLAG_SECURE,
            0);
    } else {
        File = HttpOpenRequest(Connection,NULL,TEXT(message),
            NULL,NULL,NULL,
            0,
            0);
    }
   
    if(File == NULL){
        return 0;
    }

    if(!HttpSendRequest(File,NULL,0,NULL,0)) {
        DWORD error = GetLastError();
        if(error == ERROR_INTERNET_INVALID_CA){
            File =  setIgnoreFlags(File);
            if(!HttpSendRequest(File,NULL,0,NULL,0)){
                return 0;
            }
        }
    }
   
    return 0;
}

Und hier lese ich die Daten:

Code:
    while(InternetReadFile(File,receive_buffer,SOCKET_RECEIVE_BUFFER-1,&dwBytes)){
        if(dwBytes==0){
            break;
        }
        user_string = (char*) realloc(user_string, user_string_length + dwBytes + 1);
       
        user_string[user_string_length] = '\0';
        receive_buffer[dwBytes] = '\0';
        user_string_length = user_string_length + dwBytes;

        if(user_string == NULL){
            MessageBox(NULL, "Could not allocate enough memory", "Title", MB_OK);
            return NULL;
        }
        strcat(user_string, receive_buffer);
       
    }


Kann es sein, dass die Verbindung frühzeitig abgebrochen wird? Kann ich den Timeout irgendwo setzen?
Ich habe in MSDN nachgeschaut, jedoch keine Option für ein Delay entdeckt. Könnte es an der SSL Verbindung liegen?

Wie gesagt, der Fehler tritt nur unter hoher Last auf, solange der Server realtiv schwach belasted ist funktioniert alles.
 

Neue Beiträge

Zurück