Socket connect: примеры (PHP)

Руководство по работе с socket_connect
Раздел: Сокеты
socket_connect(resource socket, string address [, int port]): bool
Функция socket_connect в PHP

Функция socket_connect инициирует соединение с сокетом, используя существующий ресурс сокета, который должен быть создан функцией socket_create. Она применяется для сетевого взаимодействия по различным протоколам.

Аргументы функции
  • $socket (обязательный) - ресурс сокета, созданный с помощью socket_create.
  • $address (обязательный) - IP-адрес или путь к доменному сокету Unix, к которому выполняется подключение.
  • $port (опциональный) - номер порта для сетевых сокетов. Для доменных сокетов Unix этот параметр должен быть указан как 0.
Примеры использования socket_connect
Подключение к TCP-серверу
<?php
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
    echo "Ошибка создания сокета: " . socket_strerror(socket_last_error());
} else {
    $result = socket_connect($socket, '127.0.0.1', 8080);
    if ($result === false) {
        echo "Ошибка подключения: " . socket_strerror(socket_last_error($socket));
    } else {
        echo "Подключение установлено";
    }
    socket_close($socket);
}
?>
Подключение установлено
Использование с IPv6
<?php
$socket = socket_create(AF_INET6, SOCK_STREAM, SOL_TCP);
if ($socket) {
    $result = socket_connect($socket, '::1', 8080);
    if ($result) {
        echo "Успешное подключение по IPv6";
    }
    socket_close($socket);
}
?>
Альтернативные функции в PHP

fsockopen - открывает соединение с сокетом и возвращает файловый указатель. Удобна для простых сетевых операций, но менее гибкая чем socket_connect.

stream_socket_client - создает потоковое подключение к удаленному серверу. Поддерживает SSL и асинхронные операции.

Аналоги в других языках

Socket connect в Python

import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('127.0.0.1', 8080))
JavaScript (Node.js)
const net = require('net');
const client = net.createConnection({ port: 8080, host: '127.0.0.1' }, () => {
    console.log('Подключено');
});
Типичные ошибки
Неверный тип сокета
<?php
$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
$result = socket_connect($socket, '127.0.0.1', 8080);
// Для UDP сокетов подключение может не требоваться
?>
Таймаут подключения
<?php
socket_set_option($socket, SOL_SOCKET, SO_SNDTIMEO, ['sec' => 5, 'usec' => 0]);
$result = socket_connect($socket, '192.168.1.100', 9999);
if ($result === false) {
    echo "Таймаут подключения";
}
?>
Изменения в PHP 8

В PHP 8 функция socket connect не претерпела значительных изменений. Однако улучшена обработка ошибок - многие функции сокетов теперь выбрасывают исключения Error при неудаче.

Расширенные примеры
Подключение с таймаутом
Пример php
<?php
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, ['sec' => 10, 'usec' => 0]);
$result = @socket_connect($socket, 'example.com', 80);
if ($result) {
    $http = "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n";
    socket_write($socket, $http);
    echo socket_read($socket, 2048);
}
?>
Использование Unix сокетов
Пример php
<?php
$socket = socket_create(AF_UNIX, SOCK_STREAM, 0);
socket_connect($socket, '/tmp/mysocket.sock', 0);
?>

PHP socket_connect function comments

En
Socket connect Initiates a connection on a socket