Mozzarella, ReadStreamCallback - это делегат, который может принадлежать обьекту, что в себе хранит любые необходимые данные о клиенте. Так что для того чтобы узнать кто послал запрос пробегаться по списку нет нужды.
А создание любого потока, это выделение минумум 1 мб данных для стека потока.
Stels007, А как иначе то. Рекурсивный вызов да еще в вечном цикле, показывает что нет даже малейшего понимания того, что пишете. Что уж тогда обьяснять, что для TcpListener нужно применять асинхронный подход, который вообще не требует создания потоков
var binding = new BasicHttpBinding();
// тут его настройки
var endpoint = new EndpointAddress("http://xxx.xxx.xxx.xxx:yyyy/Server/soap");
var client = new WebServiceclient(binding, endpoint);