Sockets - Async-Konzeptproblem
-
Hallo,
ich programmiere an einer (portablen) Socket API für Select-Aufrufe usw.
Mir stellt sich folgendes Problem:
Sendet ein Client eine große Datenmenge, dann blockiert er den Server entsprechend lange für die anderen Clients.
Ich habe mir nun gedacht, dass ich nun pro Select-Aufruf (jedesmal wird der Socket als lesbar markiert) einige Bytes in einen Buffer kopiere, bis alles angekommen ist. Nachdem alles im Puffer ist, soll es verarbeitet werden.
Wie verhindere ich, dass im Buffer nur die Hälfte der Daten ist und der Rest noch wartet, bzw. der Buffer Daten von zwei Transmissionen enthält.
Ich müsste also wissen wieviele Daten warten oder das letzte Byte des Datensatzes kennen.
PS:
Auf Non-Blocking würde ich gerne verzichten.
-
awds schrieb:
Wie verhindere ich, dass im Buffer nur die Hälfte der Daten ist und der Rest noch wartet, bzw. der Buffer Daten von zwei Transmissionen enthält.
Ich müsste also wissen wieviele Daten warten oder das letzte Byte des Datensatzes kennen.Bei TCP kannst du nicht auf "Paket"-Basis arbeiten. Die Daten kommen in einem Strom und nicht Paket weise. Wenn du Daten liest, dann nimm einfach den maximal Wert, den das System für eine Lese-Operation angibt. Unter Linux sind das glaube ich 4kb.
-
Ok, danke. Ich werd´s jetzt erstmal so probieren
MfG awds
-
awds schrieb:
Sendet ein Client eine große Datenmenge, dann blockiert er den Server entsprechend lange für die anderen Clients.
du könntest multithreading benutzen, so dass jede verbindung von einem separaten thread abgefrühstückt wird. dann blockiert nix.