По коду быстро понять сложно, не зная что было до изменений и какие изменения были внесены. По задаче эхо сервер это не чат. Задача эхо сервера отправлять клиенту теже данные, что он ему присал, это его смысл. Смысл чата в обратном, надо отправлять данные от клиента всем другим подключенным клиентам на сервере, кроме этого клиента (чтобы не было эха).
По коду сервера не видно, что вы создаете список клиентов подключенных к нему. Только лишь отдельный поток для подключения. Поэтому клиент видит только то, что сам послал. А в режиме чата данные должны были бы передаваться между потоками через какую-то общую очередь сообщений, ведь клиенты могут быть подключены с разными скоростями и не все могут справиться одновременно с получением сообщения.
Попробуйте изучить код чата реализуемого в
https://eax.me/libevent/, за одно и изучите великолепную библиотеку. Создание потока на каждое соединение приводит к быстрому исчерпанию ресурсов и приводит к так называемой проблеме C10K (10000 соединений). В мире когда миллиарды клиентов могут обращаться к серверу решения по схеме поток на соединение имеют архитектурный изъян.