Максимальный размер очереди зависит от операционной системы и выполняемых функций, например, обработка видеопотока в точке, где выполнен монтаж видеонаблюдения . При указании более высокого значения, чем допускается в операционной системе, функция listen() уменьшает его до максимально допустимого без каких-либо сообщений. Модуль Socket экспортирует константу позволяющую определить это максимальное значение.
При успешном выполнении функция listen() возвращает истинное значение и отмечает сокет sock как приемный. В ином случае она возвращает значение undef; при этом в переменной $! содержится соответствующее сообщение об ошибке.
После того как сокет отмечен как приемный, должна быть вызвана функция accept () для приема входящих соединений. Функция accept() имеет два параметра: connected_socket — имя дескриптора файла, которое приобретает вновь подключенный сокет, и listen_socket — имя приемного сокета. В случае успешного выполнения функция возвращает упакованный адрес удаленного хоста, а параметр connected_socket приводится в соответствие с входящим соединением.
После выполнения функции accept() для взаимодействия со вторым участником соединения применяется дескриптор файла connected_socket. (Этот дескриптор файла не нужно создавать заранее )! В качестве дополнительной информации укажем, что функцию accept() можно рассматривать как особую форму функции open(), в которой вместо имени файла указан дескриптор файла listen_socket.
Если ни одно входящее соединение не ждет приема, функция accept() блокируется до тех пор, пока таковое не появится. Если же клиенты подключаются быстрее, чем сценарий вызывает функцию accept() , запросы клиентов на соединение устанавливаются в очередь вплоть до предела, указанного в вызове функции listen() .