2010-02-15 9 views
5

hice esta pregunta anterior aquí:cuando se establece el indicador de empuje en el segmento TCP

tcp two sides trying to connect simultaneously

probé el método dado en la solución y al enviar al usar netcat y olfateando paquetes con etérea he observado que cuando envié una cadena "hola" de un lado a otro, se envió en un segmento con el indicador de empuje establecido.

¿quién decide establecer la bandera de inserción? ¿Cuáles son las reglas para configurar el indicador push o urgente en un segmento tcp? ¿es posible hacerlo usando la aplicación sockets?

Respuesta

6

La bandera PUSH es utilizada por la pila tcp para decir básicamente "ya terminé". Solo indica que el segmento de datos se transmite por completo por la fuente.

No hay forma de indicarlo o controlarlo en userland (su api de socket), ya que esta es solo la pila/implementación de tcp para hacerlo. Como la bandera URGENTE.

(Fuente: Richard Stevens - Tcp/ip illustrated vol 1, capítulo 20)

+7

El comentario anterior es incorrecto acerca de que no hay una forma de controlar el indicador de envío enviado desde el espacio de usuario. Consulte las opciones de socket TCP_NODELAY y TCP_CORK (man 7 tcp) y MSG_MORE flag (man 2 send). – MaZe

5

Puede establecer el indicador URGENTE usando send() con el conjunto MSG_OOB bandera. Como esto implica, los datos enviados serán fuera de banda, lo que significa que normalmente no será recibido por el lado llamante simplemente llamando al read(). El lado receptor recibirá alguna indicación de datos OOB como la señal SIGURG, o el zócalo será excepcional y se puede verificar como tal usando select().

La mayoría de las veces no desea establecer el indicador URGENTE.

Cuestiones relacionadas