[Minimal Off-Topic] Zugriff auf verfügbare Bytes an einem Socket

Post Reply
Message
Author
bakunin
Posts: 597
Joined: 16. Aug 1999 6:44
Location: Lorsch (Südhessen)
Contact:

[Minimal Off-Topic] Zugriff auf verfügbare Bytes an einem Socket

#1 Post by bakunin »

Hi!

Wir machen hier in der Schule gerade ein Projekt und da gibt es ein kleines Netzwerk-Programmierproblem. Ich habe dieses Posting als "Minimal Off-Topic" gekennzeichnet weil es eigentlich um Sockets unter MS-Windows geht, aber das ist ja weitgehend identisch zu den Unix-Sockets.

Wir senden von einem GNU/Linux-Rechner Daten über die Drehposition eines Würfels per TCP an einen Windows-Rechner, der ein passendes Bild via OpenGL darstellt. Da der Rechner bei einer schnellen Bewegung des Würfels nicht hinterherkommt, haben wir uns überlegt, dass er jeweils nur die aktuellste Drehposition verarbeitet. Also haben wir ein großes Array verwendet und der Funktion recv() gesagt, dass sie eine entsprechend große Zahl an Bytes maximal lesen soll und wir verwenden nur die neuesten Daten. Wir haben nun beobachtet, dass - auch wenn nur ein paar Byte angekommen sind - die große Zahl der maximal zu lesenden Bytes die Funktion recv() extrem langsam macht und die Ausgabe ruckelt ohne Ende. Wir haben nun also einen Wert gesucht, der "optimal" ist im Bezug darauf, dass es nicht ruckelt, der Rechner aber auch hinterherkommt. Naja, das klappt jetzt in der Testumgebung so einigermaßen, aber da der GNU/Linux-Rechner die Daten an zwei Windows-Rechner sendet, müsste man das nochmals anpassen. Und für den produktiven Einsatz jeweils nochmal, sofern es dort überhaupt einen sinnvollen Wert gibt, was fraglich ist, weil dort dann ein realer Würfel gedreht werden wird, dessen Bewegung ja nicht gleichmäßig ist. D.h. wir müssten herausfinden, wie viele Daten am Socket lesbar sind. Frage also: Wie geht das? :)

Cheers,
GNU/Wolfgang

User avatar
hjb
Pro-Linux
Posts: 3264
Joined: 15. Aug 1999 16:59
Location: Bruchsal
Contact:

Re: [Minimal Off-Topic] Zugriff auf verfügbare Bytes an einem Socket

#2 Post by hjb »

Hi,

tja, TCP ist halt kein Echtzeit-Protokoll...

Es gibt da z.B. den Nagle-Algorithmus, der das Senden von Daten verzögert, wenn noch kein volles Paket vorhanden ist. Den kann man per setsockopt abschalten.

Gruß,
hjb
Pro-Linux - warum durch Fenster steigen, wenn es eine Tür gibt?

taurus

Re: [Minimal Off-Topic] Zugriff auf verfügbare Bytes an einem Socket

#3 Post by taurus »

Hi !

zu meinen könntest vieleicht einen raw - socket aufmachen... damit kannst dann auch auf die ip - header zugreifen. dort ist ein vermerk über die größe des gesamten packets...
obs so sinvoll ist weis ich nicht...
oda ihr macht hald keinen recv sondern ein read ... das solle eigentlich auch funktionieren denn der sockethandle ist ja nix anderes als ein besonderes dateihandle ... dann hängst an den anfang 2 byte wo die puffergröße drinsteht. du read'est nur 2 byte und bekommst dadurch raus wieviel byte noch drinsind im stream und in der größe machst dir dann hald nen puffer...

vieleicht ist das ja ne anregung.

mfg,
taurus

fiesh

Re: [Minimal Off-Topic] Zugriff auf verfügbare Bytes an einem Socket

#4 Post by fiesh »

oh man, man sollte halt kein TCP verwenden, wenn UDP angebracht waere.

Post Reply