WinInet: Daten werden nicht immer empfangen
-
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: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:
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.
-
Weiss niemand wie das geht? Was ist mit synchronen und asynchronen Requests, ich habe zwar gehört das die asynchronen recht schlecht funktionieren sollen...
Wie würde man es denn mit Sockets machen um auf Daten zu warten? Gibt es eine vergleichbare Möglichkeit oder vielleicht eine eigene Funktion mit welcher man solche Attribute setzen kann?