Senden von Rohdaten mit write () in boost :: asio

8

Ich habe vor kurzem beschlossen, boost::asio für meine Sockets zu verwenden, aber jetzt stoße ich auf ein Problem: Dokumentation scheint zu fehlen.

Was ich tun möchte, ist eine Funktion schreiben, die eine Nachricht mit folgender Struktur senden wird:

  • 2 Bytes einer vorzeichenlosen Ganzzahl ( uint16_t ) für einen Opcode alle Bytes
  • alle Bytes danach (eine flexible Menge) sind ein beliebiger Datentyp (in void* umgewandelt). Diese Daten werden basierend auf dem Opcode
  • bearbeitet

Wenn der Opcode beispielsweise 1 ist und möglicherweise als OPCODE_LOGIN definiert ist, könnten die dem Opcode folgenden Bytes eine Zeichenfolge enthalten, die Anmeldeinformationen usw. enthält.

%Vor%

}

Dies wird jedoch nicht kompiliert. Ich bekomme einen kryptischen Kompilierungsfehler bezüglich des Aufrufs zum Schreiben:

%Vor%

Wie Sie sehen können, verweist die Fehlermeldung direkt auf Boosts write.hpp -Datei und nicht auf meinen eigenen Code. Ich glaube, ich rufe write() in irgendeiner Weise falsch an, aber nach einer vollen Stunde googeln und recherchieren Referenzen und Beispiele (die alle entweder eine andere überladene write() verwenden oder Daten mit speziell definierten Größen / Strukturen verwenden), konnte ich nicht feststellen, was genau ich hier falsch mache.

Kann mir jemand helfen, diesen Kompilierungsfehler zu debuggen?

    
Josh1billion 16.10.2011, 08:43
quelle

1 Antwort

14
  

Dokumentation scheint zu fehlen

Die am höchsten gewählte Frage in geht um Dokumentation, fang dort an: -)

  

Kann mir jemand helfen, diesen Kompilierungsfehler zu debuggen?

Die Funktion write() free erwartet ein Referenztyp als erster Parameter Kein Zeiger wie in Ihrem Beispiel

%Vor%
  

An diesem Punkt ist es sicher, fullData zu löschen, um Speicherlecks zu vermeiden?

Ja, write() is ein blockierender Anruf. Es wird mit Ihrem Puffer ausgeführt, wenn der Anruf zurückkehrt. Ich schlage vor, diese Codeausnahme sicher zu machen, aber schauen Sie sich new und boost::scoped_array an, wenn Sie Ihren Puffer mit dynamischer Speicherdauer erstellen wollen.

    
Sam Miller 16.10.2011, 19:56
quelle

Tags und Links