Anzeige:
Ergebnis 1 bis 3 von 3

Thema: [VS60] GetQueuedCompletionStatus(): (falsche) Anzahl an übertragenen Bytes

  1. #1
    Registrierter Benutzer
    Registriert seit
    23.04.2006
    Beiträge
    31

    [VS60] GetQueuedCompletionStatus(): (falsche) Anzahl an übertragenen Bytes

    Hallo Zusammen!

    Hab da ein Problem, bzw. eher eine Frage zu o.g. Funktion.

    Per Definition
    Code:
    BOOL GetQueuedCompletionStatus(
    HANDLE CompletionPort,       // the I/O completion port of interest
    LPDWORD lpNumberOfBytesTransferred,
                                   // to receive number of bytes 
                                   // transferred during I/O
    LPDWORD lpCompletionKey,     // to receive file's completion key
    LPOVERLAPPED *lpOverlapped,  // to receive pointer to OVERLAPPED 
                                   // structure
    DWORD dwMilliseconds         // optional timeout value
    );
    gibt der Parameter lpNumberOfBytesTransferred die Anzahl der übertragenen Bytes zurück wenn die Funktion zurückkehrt oder das timeout zuschlägt. (Auf die genaue Implementierung der I/O-CompletionPorts einzugehen würd sich glaub ich a bissal ziehen...Nur so viel: klappt wunderbar und das schon einige Zeit.)

    Das klappt auch alles wunderbar so lange ich mich im LAN bewege (Server/Client klappt auch einwandfrei). Sobald ich Daten über's Internet verschicke, kommt es ab und an (ja, ich hab noch nicht rausbekommen an was es genau liegt) vor, das die Methode mit nur einem Teil der Bytes (ca. 60%) zurückkehrt. Mit dem nächsten Completion der Rest der Daten.

    Auf der Gegenseite (Sender) hab ich bereits sichergestellt, dass auch immer die komplette Datenmenge auf die Reise geschickt wird. Anhand eines Parameter im Paket kann ich feststellen, ob noch was fehlt oder ob schon alles angekommen ist und reagiere dementsprechend. (Sollte aber eigentlich nicht passieren, da TCP[/IP] das eigentlich regelt.)

    Die Frage ist daher nicht, wie ich es erreiche, dass nur die komplette Anzahl der Daten bearbeitet wird, sondern warum das Ding völlig irrational in ca. 90% der Fälle mit den kompletten Daten aufwacht und manchmal nur mit einem Teil.

    Hat wer eine Ahnung/Tip?

    Grüße,
    m.

    PS: Datengröße ist 4k, TCP[/IP] macht das aber wie es soll. Zerfetzen und wieder zusammenbauen.
    PPS: Ein Code-BSP muss glaub ich ned sein, is fast identisch mit einschlägigen Win-BSPs.

  2. #2
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Ich verstehe das Problem nicht ganz.

    Die Daten kommen ja korrekt an, nur manchmal auf einmal und manchmal in zwei Häppchen.

    Solange die Daten korrekt eintreffen, klappt doch alles wie gewünscht, oder?

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  3. #3
    Registrierter Benutzer
    Registriert seit
    23.04.2006
    Beiträge
    31
    Ist richtig.

    Habe/hatte nur die irrsinnige Vorstellung, dass die Funktion erst wenn alle Bytes komplett übertragen worden sind zurückkehrt. Scheint aber nicht der Fall zu sein.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •