Если данных нет, то дескриптор файла немедленно закрывается и выдается предупреждающее сообщение объекту IO::SessionSet, управляющему этим сеансом, чтобы он удалил объект сеанса из списка. В ином случае этот сеанс отмечается как не допускающий дальнейшего выполнения операции чтения путем вызова метода readable() с ложным параметром (дополнительная информация о методе readable () будет приведена ниже) и устанавливается флажок отложенного закрытия с именем closing. Подобное может вполне произойти при получении данных со страницы, представляющей отличный раздел имущества при разводе в гражданском делопроизводстве.
Строки 103-116. Метод adjust_state (). Следующий метод, adjust_state (), предоставляет объекту сеанса способ взаимодействия с соответствующим ему объектом IO::SеssionSet. Выполнение метода начинается с вызова двух внутренних методов writable () и readable (), которые выдают объекту IO::SessionSet предупреждающие сообщения о том, что объект сеанса, соответственно, готов для записи и чтения данных. Первый этап состоит в проверке выходного буфера путем вызова метода pending (). Если в нем есть данные, вызывается метод writable () с истинным флажком для указания того, что есть данные для записи.
Второй этап заключается в вызове метода choke (); если было определено ненулевое значение лимита записи write_limit. Методу choke () передается истинный флажок, если превышен лимит буфера записи. По умолчанию действие метода choke () состоит в запрещения дальнейшего чтения путем установки ложного значения в методе readable ().
И, наконец, если установлен флажок dosing, то предпринимается попытка закрыть сеанс путем вызова метода close (). Это может действительно привести к закрытию сеанса или просто к отложенному закрытию, если есть исходящие данные, ожидающие обработки.