Estouro do buffer do soquete do servidor UDP

Eu estou escrevendo um aplicativo C ++ no Linux. Meu aplicativo tem um servidor UDP que envia dados para clientes em alguns eventos. O servidor UDP também recebe algum feedback / confirmação de volta dos clientes.

Para implementar este aplicativo, usei um único soquete UDP (por exemplo,int fdSocket) para enviar e receber dados de todos os clientes. Liguei este socked à porta 8080 e configurei o socket no modo NON_BLOCKING.

Eu criei dois tópicos. Em um thread eu espero que algum evento aconteça, se um evento ocorrer, então eu uso o fdsocket para enviar dados para todos os clientes (em um loop for).

No outro segmento eu uso ofdSocket para receber dados de clientes (recvfrom()). Este thread está agendado para ser executado a cada 4 segundos (ou seja, a cada 4 segundos ele será chamadorecvfrom() para recuperar os dados do buffer de soquete. Como está no modo NON-BLOCKINGrecvfrom() a função retornará imediatamente se nenhum dado UDP estiver disponível, então eu irei dormir por 4 segundos).

O Feedback UDP / Reconhecimento de todos os clientes tem uma carga útil fixa, cujo tamanho é de 20 bytes.

Agora tenho duas perguntas relacionadas a essa implementação:

É correto usar o mesmo soquete para enviar / receber dados UDP com clientes Mulitiple?Como encontrar o número máximo de pacotes UDP Feedback / Acknowledge que meu aplicativo pode manipular sem UDP Socket Buffer Overflow (já que estou lendo a cada 4secs, se eu receber muitos pacotes dentro desses 4 segundos eu posso perder alguns pacotes, por exemplo. para encontrar a taxa em pacotes / seg posso lidar com segurança)?

Eu tentei obter o tamanho do Linux Socket Buffer para o meu soquete (fdsocket) usando a chamada de funçãogetsockopt(fdsocket,SOL_SOCKET,SO_RCVBUF,(void *)&n, &m);. A partir dessa função, descubro que meu tamanho de Buffer de soquete é 110592. Mas não estou claro como os dados serão armazenados nesse buffer de soquete: ele armazenará apenas o UDP Payload ou o UDP Packet inteiro ou o evento Entire Ethernet Packet? Eu referi issoligação para ter uma ideia, mas fiquei confuso.

Atualmente meu código está um pouco sujo, vou limpar e postar em breve aqui.

A seguir estão os links que referi antes de postar esta questão.

Rede LinuxUDP SentTo e Recvfrom Max Buffer SizeDetecção de estouro de buffer de soquete UDPUDP broadcast e unicast através do mesmo socket?Enviando do mesmo soquete UDP em vários encadeamentosComo liberar o buffer de entrada de um soquete UDP em C?Como encontrar o tamanho do buffer de soquete do linuxComo obtenho quantidade de dados enfileirados para o soquete UDP?

questionAnswers(3)

yourAnswerToTheQuestion