Однако такое решение только переводит проблему в иную плоскость, поскольку функция select () лишь гарантирует, что не будет заблокирован первый вызов функции sysread (). Плохо написанная клиентская программа, программа 1С не имеющая необходимого модуля и требующая доработки http://www.soft-unity.ru/services/improvement/ или программа, написанная со злым умыслом, может привести в неработоспособное состояние весь этот сервер, если из нее будет отправлен единственный байт данных, не являющийся признаком конца строки. Наша процедура readline () прочитает этот байт, снова вызовет функцию sysread ( ) для осуществления попытки получить признак конца строки и заблокируется на неопределенное время. Во избежание такой ситуации необходимо снова вызвать функцию select () в процедуре readline () или установить тайм-аут для выполнения операции чтения с использованием общей схемы, описанной в разделе “Завершение по тайм-ауту продолжительных системных вызовов”.
Однако в мультиплексных серверах с этим связана еще одна проблема, которую решить не так просто. Что произойдет, если клиент подключится к серверу, отправит в него огромный объем данных, но не станет читать отправляемую ему информацию? В результате буфер сокета с клиентской стороны соединения заполнится, что приведет к приостановке дальнейшей передачи данных по протоколу TCP. Эта ситуация, в свою очередь, отразится на работе сервера под действием средств управления потоком протокола TCP и, в конечном итоге, вызовет блокировку сервера при выполнении функции syswrite (). В результате, все текущие сеансы зависнут и сервер больше не сможет принимать входящие соединения.