Функции сокета, относящиеся к исходящим соединениям.
Теперь рассмотрим более подробно функции, связанные с созданием сокетов и установлением исходящих соединений TCP.
$boolean = socket(SOCKET,$domain,$type,$prоtocol)
Функция socket() принимает в качестве параметров имя дескриптора файла, домен, тип и протокол, создает новый сокет и связывает его с указанным дескриптором файла. При успешном выполнении эта функция возвращает истинное значение. В случае ошибки она возвращает значение undef и оставляет сообщение об ошибке в переменной $!. Параметры с обозначением домена, типа и протокола представляют собой небольшие целые числа. Для первых двух параметров значениями могут быть константы, которые определены в модуле socket, но числовое значение протокола необходимо определить во время выполнения, вызвав функцию getprotobyname(). Для соединения сокетов TCP обычно применяется следующий формат.
Здесь функция getprotobyname() принудительно была переведена в скалярный контекст для возврата единственного результата, содержащего номер протокола.
$boolean = connect(SOCK, $dest_addr)
Функция connect() предпринимает попытку открыть сокет и установить логическое соединение с внешним адресом назначения. Сокет уже должен быть создан с помощью функции socket(), а упакованный адрес назначения — сформирован функцией sockaddr_in() или равнозначной ей функцией.
Система автоматически выберет временный порт для использования в качестве локального адреса сокета. При успешном выполнении функция connect() возвращает истинное значение. В ином случае возвращает ложное значение и устанавливает переменную $!, равную коду системной ошибки с описанием проблемы. Для сокета с установлением логического соединения нельзя вызывать connect() более одного раза; если будет предпринята еще одна попытка вызова, возникнет ошибка EISCONK ('Transport endpoint is already connected' — Оконечная точка транспортного протокола уже подключена).