HttpSendRequest - Timeout Problem...



  • Hi,

    bekanntlich hats ja mal einen von Microsoft bestätigten Bug in der HttpSendRequest() Routine gegeben: Bei unerreichbarkeit des Servers wurde das Timeout ignoriert und die Funktion kehrte nicht mehr zurück.
    Ich programmiere jetzt einen PDA unter Windows CE 3.0. Anscheinend existiert dieser Bug hier aber noch immer. Um das ganze zu Umgehen starte ich einfach einen zusätzlichen Thread, der die HttpSendRequest Funktion überwacht. Wenn diese nach einer gewissen Zeit nicht zurückkehrt, dann wird einfach der zugehörige HINTERNET vom externen Thread aus geschlossen und anstehende I/O Operationen somit beendet. Tja, theoretisch zumindest.....

    Praktisch gibts Probleme.

    Folgender Code wird verwendet:

    HINTERNET hOpen=NULL,
    hConnect=NULL,
    hRequest=NULL; // Internet Handles

    inetTimeout *myTimeout=NULL; // dies ist die Struct, die dem "KontrollThread" übergeben wird - sie besteht aus lauter Pointern.

    // Öffnen von hOpen und hConnect mit den jeweiligen Funktionen
    ...

    hRequest=HttpOpenRequest(...);
    myTimeout->hRequest=&hRequest; // Pointer auf hRequest

    CreateThread(NULL,0,InetTimeout,(void*)myTimeout,0,NULL); // Starten des Kontrollthreads (In Windows CE wird leider kein _beginthread() unterstützt...)

    HttpSendRequest(...); // Senden des HTTP requests

    Wenn nun im Kontrollthread das Timeout abläuft, dann passiert dort folgendes:

    InternetCloseHandle(*myTimeouts->hRequest);

    Theoretisch müsste jetzt der Handle, der im Hauptthread verwendet wird, geschlossen werden und die HttpSendRequest() Funktion müsste zurückkehren... tut sie aber nicht.

    Die Frage ist, warum.....????

    Kann mir jemand helfen?

    Thx und Gruss, Günny



  • Theoretisch müsste jetzt der Handle, der im Hauptthread verwendet wird, geschlossen werden und die HttpSendRequest() Funktion müsste zurückkehren... tut sie aber nicht.

    Wie kommst du auf die Idee? Keiner auser Bill weiss, was HttpSendRequest intern macht. Wenn die Funktion auf eine Antowrt von Server wartet wird sie sich so lange nicht von der Stelle rühren, bis was da ist (wenn das Timeout nicht funzt 🙄 ). Ob das Handle geschlossen wird, kann der Funktion doch völlig egal sein, so lange sie auf eine Antwort wartet.
    Ich würde mich eher nach nem Update/Servicepack umsehen 😉

    [ Dieser Beitrag wurde am 31.10.2002 um 08:30 Uhr von CMatt editiert. ]



  • Hi,
    wo ich die Idee her habe?
    http://support.microsoft.com/default.aspx?scid=kb;en-us;Q224318

    ist also eine offizielle Microsoft-Idee 😉

    Günny


Anmelden zum Antworten