¿Qué es una conexión UDP?
UDP es la abreviatura de User Datagram Protocol. El nombre chino es User Datagram Protocol. Es un protocolo de capa de transporte sin conexión en el modelo de referencia OSI (Open System Interconnection, Open System Interconnection). Un servicio de mensajería simple y poco confiable, IETF RFC 768 es la especificación oficial para UDP. El número de protocolo de UDP en paquetes IP es 17.
Problema de cambio de lista de sockets UDP
Después de usar las dos opciones de socket SO_REUSEADDR y SO_REUSEPORT, el kernel buscará los mismos destinos en la máquina local basándose en la tupla 4 del Paquete UDP: dirección IP, la ubicación de un socket en el socket del mismo puerto de destino y luego use el socket en esta ubicación como socket para recibir datos. Para garantizar que los paquetes de datos UDP del mismo punto final de cliente siempre sean procesados por el mismo socket, es necesario asegurarse de que la posición del socket en toda la cadena de sockets no se pueda cambiar.
Sin embargo, si un socket en el medio de la lista de sockets se cuelga, hará que la lista de sockets se reordene, lo que causará problemas. Entonces, la solución básica es no cerrar el socket UDP durante todo el proceso de servicio (por supuesto, también puede cerrar todos los sockets UDP y crear un nuevo lote de nuevos). Para garantizar esto, necesitamos que un maestro administre la creación y el cierre de todos los sockets UDP. El proceso de trabajo solo es responsable de manejar las tareas de E/S de la red. Por esta razón, necesitamos que el socket tenga el indicador CLOEXEC (SOCK_CLOEXEC). cuando se crea).
Materiales de referencia
Enciclopedia UDP.Baidu [Tiempo de cita 2018-4-1]