nntp2http.com
Posting
Suche
Optionen
Hilfe & Kontakt

Entwurf eines binären Protokoll

Von: Andreas Volz (usenet-spam-trap@brachttal.net) [Profil]
Datum: 17.05.2008 00:23
Message-ID: <20080517002349.6bc3de2c@frodo.mittelerde>
Newsgroup: de.comp.os.unix.programming
Hallo,

ich möchte Daten zwischen zwei Prozessen austauschen. Dafür
nehme
ich
einen FIFO. Ich habe mir ein Protokoll ausgedacht:

1 byte - header start mark (0xEA)
4 byte - packet size (header+size+payload)
----- payload start -----
4 byte - id
x byte - data
----- payload end -------

Das ganze habe ich in C++ implementiert und es funktioniert soweit gut.
Jetzt habe ich ein paar Fragen dazu.

Aktuell lese ich auf der Leser-Seite immer ein Byte nach dem anderen.
Auf der Schreiber-Seite schreibe ich immer einen Block mit einem
write() Aufruf. Derzeit ist das kein Problem, weil es nur wenige Bytes
sind. Später habe ich vor auch mal ein paar MB als 'data' zu
übertragen. Kann ich da (unter Linux) Probleme bekommen, wenn ich das
in einem Rutsch schreibe? Sollte man das in mehrere write() Aufrufe,
mit kleinem Puffer, unterteilen?

Ein write() Aufruf hat Erfolg und meldet eine bestimmte Anzahl von
Bytes zurück. Kann man dann davon ausgehen, dass die bytes auf jeden
Fall von der Leser-Seite abgeholt werden?

Was passiert, wenn meine Applikation während eines write() Aufrufs auf
einen FIFO stirbt? Wird die Leser-Applikation erhalten was bis dahin
schon im FIFO drinnen ist oder nichts?

Wäre dafür evtl. die Option 'O_SYNC' von open()
zuständig? I
n der
Manpage steht aber es wäre für Linux (Stand: Linux 0.99pl7)
nicht
implementiert.

Um den Hintergrund der Fragen oben etwas zu erklären. Es
könnte ja
vorkommen, dass das "header start mark" nochmal in einem der anderen
Felder vorkommt. Wenn ein write() in einen FIFO auch mal weniger Bytes
als verlangt schreiben könnte, dann müsste ich alle Vorkommen
von
0xEA
im restlichen Paket maskieren. Sonst interpretiere ich u.U. den Start
eines neuen Pakets fälschlich als Daten eines vorherigen abgebrochenen
Pakets.

Gruß
Andreas


--
Technical Blog <http://andreasvolz.wordpress.com/

[ Auf dieses Posting antworten ]

Antworten