Теперь подключенный сокет добавляется к набору сеансов путем вызова его метода add(), и выполняется то же действие для дескрипторов файлов stdjn и stdout. Каждый из этих вызовов возвращает объект IO::SessionData, который сохраняется для последующего использования.
При добавлении к набору сеансов дескриптора stdout применяется второй параметр с истинным значением, который указывает, что дескриптор stdout предназначен только для записи, Это исключает возможность для данного объекта набора сеансов поместить дескриптор stdout в список дескрипторов, контролируемых в целях определения готовности для чтения,
Строки 14-21. Установка подпрограмм обратного вызова метода choke () . Следующие два оператора устанавливают специализированные подпрограммы обратного вызова для метода choke (). Первый вызов метода set_choke ( ) определяет подпрограмму обратного вызова, которая запрещает чтение из сокета после заполнения буфера stdout. Второй вызов устанавливает подпрограмму обратного вызова, которая запрещает чтение из дескриптора stdin после заполнения выходного буфера сокета. Эти правила поведения являются более подходящими по сравнению с предусмотренными по умолчанию в модуле IO::SessionSet, которые в наибольшей степени приемлемы при чтении и записи в один и тот же дескриптор файла.
Сами подпрограммы обратного вызова являются анонимными. Каждая из них вызывается методом choke () с двумя параметрами, состоящими из текущего объекта IO::SessionSet и флажка, указывающего, должны ли быть применены к данному сеансу ограничения, налагаемые методом choke (), или наоборот сняты.