Недостатки данной версии психотерапевтического сервера.
Вы можете вызвать на выполнение эту версию сервера, подключиться к нему через telnet (или воспользоваться одним из клиентов gab, разработанных в этой или предыдущих разделах) и провести приятную беседу. Оставив открытым один сеанс, им можете открыть несколько новых и убедиться в том, что все они правильно поддерживают диалог.
К сожалению, этот сервер работает не совсем правильно. Он начнет давать сбои, как только вы попытаетесь его использовать не в интерактивном режиме, например, выполняя один из клиентских сценариев в пакетном режиме со стандартным вводом направленным из файла. В ответах могут появляться искаженные слова или содержаться встроенные символы обозначения конца строки. Причина этого в том, что было принято неправильное предположение, что функция sysread () возвращает полную строку текста при каждом вызове. В действительности функция sysread () предназначена для построчной передачи данных и только кажется действующей в таком режиме при использовании с клиентом, который передает данные в виде отдельных строк. Если клиент не ведет себя так, то функция sysread () может вернуть небольшой фрагмент данных, имеющий длину меньше целой строки, или может вернуть данные, содержащие несколько строк.
Поскольку мы должны избегать использования оператора <>, очевидное решение состоит в написании собственной процедуры readline (). После вызова этот процесс должен буферизовать вызовы функции sysread (), возвращая только часть буфера, вплоть до первого обозначения конца строки. Если конец строки не будет сразу обнаружен, процедура readline () должна вызвать функцию sysread () столько сколько потребуется.