Потоки переработаны ещё раз. Код избавлен от небезопасных функций, при завершении соединения больше не сыпятся исключения. Кроме того, я ещё раз упростил и оптимизировал код. Наверное :-)
Сервер переработан таким образом, чтобы служба подключения клиентов запускалась как отдельный сервис. Выполняется он в отдельном потоке и может быть остановлен. Каждое соединение с клиентом также выполняется в отдельном потоке, при остановке службы все потоки корректно тормозятся, при этом клиентам посылается команда на закрытие. Прикручена система логгирования.