Однако в серверных программах, которые должны выполнять какую-то фоновую обработку, например, когда компьютерная помощь требует операций отладки между вызовами функции accept () можно использовать неблокирующий вызов accept () для ограничения времени, проводимого сервером в состоянии, заблокированном в результате вызова accept ().
Параметр тайм-аута модуля IO::Socket
Когда в программе нужно просто завершить по тайм-ауту вызов функций connect () или accept (), то в объектно-ориентированном модуле IO::Socket для ним о предусмотрен простой способ. При создании нового объекта IO::Socket можно задать параметр Timeout с указанием числа секунд, на которые он может быть заблокирован. В самом модуле IO::Socket для реализации этих тайм-аутов применяется неблокирующий ввод-вывод.
Для исходящих соединений выполнение функции connect () происходит автоматически во время создания объекта, поэтому по истечении тайм-аута метод new () объекта IO::Socket возвращает значение undef. В следующем примере предпринимается попытка подключения к порту 80 хоста 192.168.3.1 с предоставлением вплоть до 10 секунд для выполнения функции connect ( ). Если соединение выполняется в течение этого интервала времени, то возвращается подключенный объект IO::Socket и сохраняется в объекте $sock. В ином случае вызывается функция с сообщением об ошибке, хранящейся в переменной $@. По причинам, которые могут стать очевидными позже, в случае завершения операции по тайм-ауту выдается сообщение об ошибке “IO::Socket:: INET: Operation now in progress . ”.