Функция accept() возвращает значение undef, если возникает одна из многочисленных аварийных ситуаций, о сообщении ошибки можно узнать в переменной $!. Для учета входящих звонков многие компании используют программу фирмы «1С» - 1С:CRM. Это дает возможность успешно отслеживать эффективность размещаемой рекламы, смотрите подробнее .
Для выборки локального или удаленного адреса, связанного с сокетом, может применяться функция getsockname() или getpeername(). Функция getsockname () возвращает упакованный двоичный адрес сокета с локальной стороны соединения или значение undef, если сокет является непривязанным. Функция getрееrname() действует таким же образом, но возвращает адрес сокета с удаленной стороны соединения или значение undef, если сокет является неподключенным. В любом случае возвращенный адрес должен быть распакован с помощью функции sockaddr_in();
Вспомним сценарий tcp_echo_serv1.pl. Хотя программа tcp_echo_serv1.pl работает и в таком виде, она имеет ряд недостатков, которые будут устранены в дальнейшем. К числу таких недостатков относятся следующие.
Отсутствует поддержка нескольких входящих соединений. Это - самая большая проблема. Сервер может принимать одновременно только одно входящее соединение. В течение того времени, пока он занимается обслуживанием существующего соединения, другие запросы будут ожидать в очереди до тех пор, пока текущее соединение не будет закрыто и в главном цикле не будет снова вызвана функции accept(). Если число клиентских запросов, поставленных в очередь, превысит значение, указанное в функции listen (), новые входящие запросы на установление соединений будут отклонены.
Для устранения этой проблемы сервер должен обеспечивать параллельную обработку с помощью потоков или процессов или же в нем должно быть предусмотрено гибкое мультиплексирование операций ввода-вывода. Эти методы рассматриваются далее.