Desbordamiento de búfer de socket del servidor UDP

Estoy escribiendo una aplicación de C ++ en Linux. Mi aplicación tiene un servidor UDP que envía datos a los clientes en algunos eventos. El servidor UDP también recibe algunos comentarios / acuse de recibo de parte de los clientes.

Para implementar esta aplicación, utilicé un solo Socket UDP (por ejemplo,int fdSocket) Enviar y recibir datos de todos los clientes. He enlazado este socked al puerto 8080 y he configurado el socket en el modo NON_BLOCKING.

He creado dos hilos. En un hilo, espero que ocurra algún evento, si ocurre un evento, uso fdsocket para enviar datos a todos los clientes (en un bucle for).

En el otro hilo utilizo elfdSocket recibir datos de clientes (recvfrom()). Este hilo está programado para ejecutarse cada 4 segundos (es decir, cada 4 segundos llamarárecvfrom() para recuperar los datos del búfer de socket. Ya que está en modo NO BLOQUEO elrecvfrom() la función regresará inmediatamente si no hay datos UDP disponibles, luego iré a dormir durante 4 segundos).

La respuesta / reconocimiento UDP de todos los clientes tiene una carga útil fija cuyo tamaño es de 20 bytes.

Ahora tengo dos preguntas relacionadas con esta implementación:

¿Es correcto usar el mismo socket para enviar / recibir datos UDP con clientes Mulitiple?Cómo encontrar el número máximo de paquetes de comentarios / acuse de recibo de UDP que mi aplicación puede manejar sin desbordamiento de búfer de socket UDP (ya que estoy leyendo cada 4 segundos, si recibo muchos paquetes en estos 4 segundos, podría perder algún paquete, es decir, necesito para encontrar la tasa en paquetes / seg que puedo manejar con seguridad)?

Intenté obtener el tamaño de Linux Socket Buffer para mi socket (fdsocket) usando la llamada de funcióngetsockopt(fdsocket,SOL_SOCKET,SO_RCVBUF,(void *)&n, &m);. Por esta función, descubro que el tamaño de mi Socket Buffer es 110592. Pero no estoy claro, ¿qué datos se almacenarán en este búfer de socket: almacenará solo la Carga útil UDP o el Paquete UDP completo o sucederá con el Paquete Ethernet completo? Me referí a estoenlazar para tener alguna idea pero se confundió.

Actualmente mi código está un poco sucio, lo limpiaré y lo publicaré pronto aquí.

Los siguientes son los enlaces que he mencionado antes de publicar esta pregunta.

Redes de linuxUDP SentTo y Recvfrom Max Buffer SizeDetección de desbordamiento de búfer de socket UDP¿Difusión UDP y unicast a través del mismo socket?Enviando desde el mismo socket UDP en múltiples hilos¿Cómo vaciar el búfer de entrada de un socket UDP en C?Cómo encontrar el tamaño de búfer socket de linux¿Cómo obtengo la cantidad de datos en cola para el socket UDP?

Respuestas a la pregunta(3)

Su respuesta a la pregunta