2010-02-15 8 views
5

gefragt i diese vorherige Frage hier:wenn der Push-Flag im TCP-Segment gesetzt

tcp two sides trying to connect simultaneously

i das Verfahren in der Lösung gegeben versucht und beim Senden während netcat verwenden und Schnüffeln Pakete mit etherischer i beobachtet, dass als ich eine "hallo" string von einer seite an die andere sendete, wurde sie in einem segment mit dem push flag gesendet.

Wer entscheidet, die Push-Flagge zu setzen? Welche Regeln gelten für das Setzen des Push- oder Dringlichkeits-Flags in einem TCP-Segment? ist es möglich, es mit den Sockeln api zu tun?

Antwort

6

Das PUSH-Flag wird vom TCP-Stack verwendet, um zu sagen: "Ich bin jetzt fertig". Es zeigt nur an, dass das Datensegment vollständig von der Quelle übertragen wird.

Es gibt keine Möglichkeit, dies in userland (Ihre Socket-API) anzugeben oder zu kontrollieren, da dies nur der tcp-Stack/die entsprechende Implementierung ist. Als die DRINGENDE Flagge.

(Quelle: Richard Stevens - Tcp/ip illustrated vol 1, Kapitel 20)

+7

Der obige Kommentar ist falsch, da es keine Möglichkeit gibt, das gesendete Push-Flag aus dem Benutzerbereich zu steuern. Siehe TCP_NODELAY- und TCP_CORK-Socket-Optionen (man 7 tcp) und MSG_MORE-Flag (man 2 send). – MaZe

5

Sie können den Dringlichkeits-Flag gesetzt send() mit der MSG_OOB-Flag gesetzt werden. Da dies bedeutet, dass die gesendeten Daten Out-Of-Band sein werden, was bedeutet, dass sie normalerweise nicht von der anrufenden Seite empfangen werden, die einfach read() aufruft. Die empfangende Seite erhält eine Anzeige von OOB-Daten wie das Signal SIGURG, oder die Buchse wird außergewöhnlich und kann als solche unter Verwendung von select() überprüft werden.

Meistens möchten Sie die URGENT-Flagge nicht setzen.

Verwandte Themen