TCP- или UDP-пакеты всегда содержат два поля номера порта: отправителя и получателя. Тип обслуживающей программы определяется портом получателя поступающих запросов, и этот же номер является портом отправителя ответов. «Обратный» порт (порт отправителя запросов, он же порт получателя ответов) при подключении по TCP определяется клиентом произвольно (хотя номера меньше 1024 и уже занятых портов не назначаются), и для пользователя интереса не представляет. Использование обратных номеров портов в UDP зависит от реализации.
вывод — с одного ip один клиент
upd2 с другой стороны работают же целыми сетями через один шлюз...
если подумать
при подключении по TCP определяется клиентом произвольно (хотя номера меньше 1024 и уже занятых портов не назначаются)
наоборот значит что как раз приемный порт у сокета стремится быть уникальным..
как вариант — попробовать из разных процессов, поискать альтернативные реализации сокетов