Для очень опытного варианта вашей задачи в Linux вы можете отобразить входящие пакеты в ваш процесс, используя модуль очереди netfilter.Затем вы можете удалить / изменить / их.
prog1: checks if packet came from IP xxx.xxx.xxx. Match? Catch packet.
prog2: checks if prog3 busy. Match? Catch packet.
prog3: checks packet's origin...
Однако это приводит к ~ 20 КБ кода только для обработки пакетов, и ваш стек TCP / IP не выдержит его долго (большой трафик == большая ошибка).
В Windows вы можете добиться того же с помощью драйвера Winsock.
Это эзотерическое решение, просто создайте один диспетчерский процесс, чтобы раскошелиться на другие.Позаботьтесь о nginx, apache2, cometd или любом асинхронном TCP-модуле Perl, чтобы уловить идею.