Re: Sockets mit C unter FreeBSD

From: Peter Ross <Peter.Ross(at)alumni.tu-berlin.de>
Date: Wed, 14 Sep 2005 16:36:19 +1000 (EST)

Matthias Fechner wrote:
> Was wuerde denn passieren, wenn ich 64kB im Buffer habe und es kommen
> noch mehr Daten, sagt dann das TCP/IP Protokol, Buffer voll und der
> Sender schickt die Daten erneut, ueberschreibt er die Daten oder wirft
> er einfach Daten weg?

Das duerfte sich bei TCP und UDP unterscheiden..

Wenn Du TCP machst, socket type SOCK_STREAM, sollte sich TCP drum
kuemmern, die Geschwindigkeit anzupassen (sonst waere es ja nicht wirklich
verlaesslich). Wie das geht, ueber die Groesse des TCP Windows, ist in
Stevens "TCP/IP Illustrated, Vol.1" beschrieben, online habe ich dies
gefunden:

http://dast.nlanr.net/Projects/Autobuf_v1.0/autotcp.html

UDP wartet ja auf keine Bestaetigungen, deshalb wuerde ich annehmen, dass
die UDP-Pakete stillschweigend verloren gehen.

Ich frage mich gerade, ob das OS im TCP/IP-Stack ein "Zwischenlager" hat,
wo _alle_ Pakete eine Weile verweilen koennen, bis der entsprechende
socket buffer Platz hat. Ich vermute, das haengt von der
Stack-Implementierung ab, hier bin ich ueberfragt.

Zumindest wenn man einen Zero-Copy-Stack anstrebt, um die Geschwindigkeit
zu erhoehen, wird's sicher im System eng werden, wenn das Socket nicht
mehr mitkommt (wobei ich mir vorstellen kann, dass es einen globalen
Puffer gibt und die einzelnen Sockets bekommen je nach Anforderung ihren
Teil, der Rest koennte dann sozusagen Reserve werden, wenn der socket
buffer voll ist)

Aber das ist Spekulation meinerseits. Ich bin natuerlich ueber
Ergaenzungen/Berichtigungen dankbar:-)

Es gruesst
Peter

To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Wed 14 Sep 2005 - 08:37:09 CEST

search this site