Конечно может, ведь все существующие протоколы прикладного уровня, например HTTP, созданы на основе TCP, в HTTP и запрос и ответ - это TCP-пакеты, клиентов явно поддерживается много, просто на каждого клиента создайте свой поток с циклом чтения, еще в одном потоке принимайте клиентов (accept) и создавайте потоки с циклами, а если требуется отправить пакет клиенту вне цикла чтения (по какому-то действию со стороны сервера), то поток стало быть еще один нужен, или просто в основном потоке (GUI), а в некоторых библиотеках, например Qt, потоки реализованы "из коробки" в самих классах и достаточно подписаться на сигналы (события).