Создаёт сокет (конечную точку для обмена информацией)

# socket_create

(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)

socket_create — Создаёт сокет (конечную точку для обмена информацией)

### Описание

function socket_create(int `$domain`, int `$type`, int `$protocol`): Socket|false

Создаёт и возвращает экземпляр Socket, также называемый как конечная точка обмена информацией. Типичное сетевое соединение состоит из двух сокетов, один из которых выполняет роль клиента, а другой выполняет роль сервера.

### Список параметров

`domain`

  Параметр `domain` определяет семейство протоколов, используемых сокетами.

  Доступные семейства адресов/протоколов
  Семейство | Описание
  --- | ---
  `AF_INET` | Internet-протоколы IPv4. TCP и UDP - это стандартные протоколы этого семейства протоколов.
  `AF_INET6` | Internet-протоколы IPv6. TCP и UDP - это стандартные протоколы этого семейства протоколов.
  `AF_UNIX` | Семейство протоколов для локального обмена данными. Высокая эффективность и низкие накладные расходы делают его отличным видом IPC (межпроцессного взаимодействия).

`type`

  Параметр `type` определяет тип обмена данными, который будет использоваться сокетом.

  Доступные типы сокетов
  Тип | Описание
  --- | ---
  `SOCK_STREAM` | Обеспечивает последовательные, надёжные, полнодуплексные, байтовые потоки с установлением соединения. Может поддерживаться механизм передачи внеполосных (out-of-band) данных. Протокол TCP основан на этом типе сокетов.
  `SOCK_DGRAM` | Поддерживает датаграммы (ненадёжные сообщения без установления соединения фиксированной максимальной длины). Протокол UDP основан на этом типе сокетов.
  `SOCK_SEQPACKET` | Предоставляет последовательную, надёжную, двунаправленную, базирующуюся на соединениях передачу датаграмм с фиксированной максимальной длиной. Потребитель должен читать весь пакет целиком при каждой итерации чтения.
  `SOCK_RAW` | Предоставляет доступ по неподготовленному (raw) сетевому протоколу. Это специальный тип сокета может быть использован для ручного создания любого типа протокола. Стандартное использование этого типа сокетов - выполнение запросов ICMP (таких как ping).
  `SOCK_RDM` | Предоставляет надёжный уровень датаграм, не гарантирующий сохранение порядка. Скорее всего, это семейство протоколов не реализовано в вашей операционной системе.

`protocol`

  Параметр `protocol` указывает конкретный протокол в заданном семействе протоколов `domain`, который будет использоваться в обмене данными с созданным сокетом. Соответствующее значение может быть получено по имени при помощи функции getprotobyname(). Если желаемый протокол TCP или UDP, то соответствующие константы `SOL_TCP` и `SOL_UDP` также могут быть использованы.

  Стандартные протоколы
  Название | Описание
  --- | ---
  icmp | ICMP (Internet Control Message Protocol, протокол межсетевых управляющих сообщений) используется преимущественно шлюзами и хостами для сообщения об ошибках в передаче датаграмм. Команда "ping" (присутствующая в большинстве современных операционных систем) - это пример использования ICMP-протокола.
  udp | UDP (User Datagram Protocol, протокол пользовательских датаграмм) - это протокол без установления соединения, ненадёжный, протокол с фиксированной длиной записей. Из-за этих аспектов, UDP требует минимального количества служебной информации.
  tcp | TCP (The Transmission Control Protocol, протокол управления передачей) - это надёжный, базирующийся на соединениях, потокоориентированный, полнодуплексный протокол. TCP гарантирует, что все пакеты данных будут получены в том порядке, в котором они были отправлены. Если какой-нибудь пакет каким-либо образом был утерян во время передачи данных, TCP будет автоматически передавать пакет повторно до тех пор, пока хост назначения не подтвердит этот пакет. В целях надёжности и производительности, реализация протокола TCP сама выбирает подходящие границы октета нижележащего уровня обмена датаграммами. Таким образом, приложения, использующие TCP, должны предоставлять возможность частичной передачи записей.

### Возвращаемые значения

Функция socket_create() возвращает экземпляр Socket в случае успешного выполнения, или `false` в случае возникновения ошибки. Код ошибки может быть получен при помощи вызова функции socket_last_error(). Эта ошибка может быть передана функции socket_strerror() для получения текстового описания ошибки.

### Ошибки

Если указан неверный параметр `domain` или `type`, функция socket_create() будет использовать по умолчанию значение `AF_INET` и `SOCK_STREAM` соответственно, и дополнительно к этому выдаст сообщение `E_WARNING`.

### Список изменений

Версия | Описание
--- | ---
8.5.0 | Теперь поддерживает создание сокетов семейства `AF_PACKET`.
8.0.0 | В случае успешного выполнения функция возвращает экземпляр Socket; ранее возвращался ресурс (resource).

### Смотрите также

- socket_accept() - Принимает соединение на сокете
- socket_bind() - Привязывает имя к сокету
- socket_connect() - Начинает соединение с сокетом
- socket_listen() - Прослушивает входящие соединения на сокете
- socket_last_error() - Возвращает последнюю ошибку сокета
- socket_strerror() - Возвращает строку, описывающую ошибку сокета

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open