Benutzer mit den meisten Antworten
sockets -> was passiert, wenn der Empfangspuffer überläuft?

Frage
-
Hallo...
Angenommen, ich hätte eine Socket-Verbindung und der Sender sendet dauernd. Der Receiver ruft aber nie recv auf ... was passiert dann? ... wir der Sender eingebremst (sprich bekommt kein FD_WRITE mehr) ? oder gehen Daten unter Umständen verloren? ... muss ich selber dafür sorgen, dass die Puffer nicht überlaufen?
Rudolf
Antworten
-
Hi,
bin mir nicht mehr 100%ig sicher aber es müsste so ählich laufen:
Der Empfänger Puffert die ankommenden Pakete, solange Speicher dafür vorhanden ist.
Sobald der Speicher nicht ausreicht, wird das Paket als nicht empfangen dem Sender mitgeteilt (TCP vorrausgesetzt, bei UDP sind die Daten einfach weg!).
Der Sender versucht (im Normalfall) dann daraufhin die Daten erneut zu senden, hängt als dann in einer "Senden-Schleife", da die Pakete ja nie ankommen können.
Sobald der Empfänger den Puffer ausliest, wird wieder Speicher frei und kann weitere Daten empfangen, woraufhin der Sender nun wieder die nächsten Pakete senden kann.
Also kurz gesagt, sollte sich das dann im send() beim Sender bemerkbar machen, da er keine Daten schicken konnte (ist aber kein SOCKET_ERROR, sondern einfach ein send() mit 0 geschriebenen Bytes).
Gruß,
Peter
When someone helps you, have a heart and try to help others!- Als Antwort markiert Martin RichterModerator Mittwoch, 5. Januar 2011 07:06
Alle Antworten
-
Hi,
bin mir nicht mehr 100%ig sicher aber es müsste so ählich laufen:
Der Empfänger Puffert die ankommenden Pakete, solange Speicher dafür vorhanden ist.
Sobald der Speicher nicht ausreicht, wird das Paket als nicht empfangen dem Sender mitgeteilt (TCP vorrausgesetzt, bei UDP sind die Daten einfach weg!).
Der Sender versucht (im Normalfall) dann daraufhin die Daten erneut zu senden, hängt als dann in einer "Senden-Schleife", da die Pakete ja nie ankommen können.
Sobald der Empfänger den Puffer ausliest, wird wieder Speicher frei und kann weitere Daten empfangen, woraufhin der Sender nun wieder die nächsten Pakete senden kann.
Also kurz gesagt, sollte sich das dann im send() beim Sender bemerkbar machen, da er keine Daten schicken konnte (ist aber kein SOCKET_ERROR, sondern einfach ein send() mit 0 geschriebenen Bytes).
Gruß,
Peter
When someone helps you, have a heart and try to help others!- Als Antwort markiert Martin RichterModerator Mittwoch, 5. Januar 2011 07:06