Dificultar não vai. De fato, estou tentando isolar as funções ao máximo, para evitar dependências desagradáveis.
O código, multithreaded, essencialmente é o mesmo, só que usa mecanismo de sincronismo nas chamadas à função sendto() para evitar overlapping (já que usa o mesmo socket descriptor - como citei no item 1, na mensagem original, acima).
O código ainda é experimental em dois sentidos:
1º - Não sei se sincronizar as threads nas chamadas a sendto() seja uma boa idéia, em termos de performance. Com isso estou "serializando-as" neste ponto (ou seja, quando uma está mandando, as outras estão esperando).
2º - Não sei se a aproximação que escolhi é a melhor... A outra idéia que tive era a de criar um "cache" de pacotes... A medida que as threads fossem montando os pacotes, os efilerariam e uma outra thread os "colheria" e enviaria. Isso poderia criar o problema de exaustão de memória, mas é uma coisa controlável, impondo-se um limite superior (onde as threads "parariam" até que o cache fosse esvaziado em algum ponto). Essa será a outra aproximação do código experimental... ISSO poderá dar um aumento de performance superior ao código atual do T50... Só que o código ficará um cadinho (há!) mais complexo!
[]s
Fred