Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
Kleine TCP-Pakete

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - C
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
hjb
Pro-Linux


Anmeldungsdatum: 15.08.1999
Beiträge: 3236
Wohnort: Bruchsal

BeitragVerfasst am: 18. Jul 2000 16:21   Titel: Kleine TCP-Pakete

Hi,

in einem Programm hat sich die Notwendigkeit ergeben, in schneller Folge Datenpakete zu senden. Dazu verwende ich den send oder write System call. Das funktioniert perfekt, solange alle Datenpakete (außer dem letzten) genau so lang sind wie die MTU auf der Verbindung (längere Pakete werden von TCP automatisch fragmentiert, doch damit kommt der Empfänger nicht klar).

Wenn aber zwischendurch einmal ein kürzeres Datenpaket gesendet werden soll, passiert folgendes:

Das kurze Paket landet im Sendepuffer, wird aber nicht gesendet, weil noch Platz im Puffer ist. Das nächste Paket wird an den Puffer angehängt, wobei der Teil, der nicht mehr in den Puffer paßt, weggeworfen wird. Dieses 2-in-1-Paket wird dann gesendet.

Ich suche einen Weg, dem TCP-Stack zu sagen: "Hier habe ich 433 Bytes, sende sie weg, ohne auf einen vollen Puffer zu warten". Zwei Möglichkeiten habe ich bisher gefunden:

Aufruf von sleep(1) nach einem kurzen Paket. Doch das verzögert den Transfer zu lang.

Füllen des Puffers bis zum Ende mit Müll. Das ist OK, aber nicht ideal.

Nichts gebracht hat der Aufruf von fsync, das Warten auf einen schreibbaren Puffer mit select oder das Setzen von SO_SNDTIMEO.

Kennt jemand eine bessere Möglichkeit?

Danke,
hjb
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger

Jochen
Gast





BeitragVerfasst am: 19. Jul 2000 7:26   Titel: Re: Kleine TCP-Pakete

Das sollte sich über setsockopt(2) einstellen lassen:

code:

int nodelay_flag = 1;
setsockopt (socket, IPPROTO_TCP, TCP_NODELAY, (void *) &nodelay_flag, sizeof(nodelay_flag));


Passende Lektüre:
man 4 tcp
man 2 setsockopt
W. R. Stevens, "Programmieren von UNIX-Netzen", Kapitel 6.11. "Socket-Optionen" (zumindest in meiner alten Auflage)

Hoffe, dass Dir das weiterhilft!
 

hjb
Pro-Linux


Anmeldungsdatum: 15.08.1999
Beiträge: 3236
Wohnort: Bruchsal

BeitragVerfasst am: 19. Jul 2000 10:09   Titel: Re: Kleine TCP-Pakete

Hi Jochen,

genau das dürfte es sein. Ich hab den Stevens, Second Edition, hier, dort steht es in Section 7.9. Das habe ich gestern einfach übersehen.

Danke!

Gruß,
hjb
_________________
Pro-Linux - warum durch Fenster steigen, wenn es eine Tür gibt?
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - C Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy