network-programming - esta - puerto 25 tcp
¿Cuándo se bloquea un envío a UDP()? (2)
Mientras utiliza el comportamiento predeterminado (bloqueo) en un socket UDP, ¿en qué caso se bloqueará una llamada a sendto ()? Estoy interesado esencialmente en el comportamiento de Linux.
Para TCP, entiendo que el control de congestión hace que el envío de llamadas () se bloquee si la ventana de envío está llena, pero ¿qué pasa con UDP? ¿Incluso bloquea a veces o simplemente permite que los paquetes se descarten en las capas inferiores?
Esto puede deberse a que su sistema operativo está intentando realizar una solicitud ARP para obtener la dirección de hardware del host remoto.
Básicamente, cuando un paquete se apaga, el encabezado requiere la dirección IP del host remoto y la dirección MAC del host remoto. 192.168.1.34 y AB: 32: 24: 64: F3: 21.
Su comportamiento de "bloqueo" podría ser que ARP está funcionando.
He escuchado en versiones anteriores de Windows (2k, creo), que el primer paquete a veces se descartaría si la solicitud demora demasiado y usted envía demasiados datos. Un service pack probablemente solucionó eso desde entonces.
Esto puede suceder si llenó su búfer de socket, pero es altamente dependiente del sistema operativo . Dado que UDP no ofrece ninguna garantía de que su sistema operativo puede decidir hacer lo que quiera cuando su búfer de socket esté lleno: bloquear o soltar. Puede intentar aumentar SO_SNDBUF para alivio temporal.
Esto incluso puede depender del ajuste fino de su sistema, por ejemplo, también puede depender del tamaño del anillo de TX en el controlador de su interfaz de red. Hay algunas discusiones sobre esto en la lista de correo de iperf , pero usted realmente quiere discutir esto con los desarrolladores de su sistema operativo .