PHP Conference Kansai 2025

Opciones de contexto de los sockets

Opciones de contexto de los socketsLista de opciones de contexto de los sockets

Descripción

Las opciones de contexto de los sockets están disponibles para todos los gestores que funcionan a través de los sockets, como tcp, http y ftp.

Opciones

bindto

Utilizado para especificar la dirección IP (ya sea IPv4 o IPv6), y/o el número del puerto que PHP utilizará para acceder a la red. La sintaxis es ip:puerto para las direcciones IPv4, y [ip]:puerto para las direcciones IPv6. El hecho de definir la IP o el puerto a 0 permitirá al sistema elegir el puerto y/o la IP por sí mismo.

Nota:

Dado que FTP crea 2 sockets de conexión durante una operación normal, el número del puerto no puede ser especificado utilizando esta opción.

backlog

Utilizado para limitar el número de conexiones activas en la lista de espera del socket.

Nota:

Esto solo es aplicable a la función stream_socket_server().

ipv6_v6only

Sustituye el sistema operativo por defecto en cuanto al mapeo de IPv4 en IPv6.

Nota:

Esto es importante en particular cuando se intenta escuchar en las direcciones IPv4 por separado mientras existe una ligadura en [::].

Esto solo es aplicable a la función stream_socket_server().

so_reuseport

Permite múltiples ligaduras de una misma pareja ip:puerto, incluso desde procesos distintos.

Nota:

Esto solo es aplicable a la función stream_socket_server().

so_broadcast

Permite enviar y recibir datos hacia/desde direcciones de difusión.

Nota:

Esto solo es aplicable a la función stream_socket_server().

tcp_nodelay

Poner el valor a true definirá SOL_TCP,NO_DELAY=1 correctamente, lo que desactivará el algoritmo TCP Nagle.

Historial de cambios

Versión Descripción
7.1.0 Adición del parámetro tcp_nodelay.
7.0.1 Adición del parámetro ipv6_v6only.

Ejemplos

Ejemplo #1 Ejemplo de uso del parámetro bindto

<?php
// Conexión a Internet utilizando la IP '192.168.0.100'
$opts = array(
'socket' => array(
'bindto' => '192.168.0.100:0',
),
);

// Conexión a Internet utilizando la IP '192.168.0.100' y el puerto '7000'
$opts = array(
'socket' => array(
'bindto' => '192.168.0.100:7000',
),
);

// Conexión a Internet utilizando la dirección IPv6 '2001:db8::1'
// y el puerto '7000'
$opts = array(
'socket' => array(
'bindto' => '[2001:db8::1]:7000',
),
);

// Conexión a Internet utilizando el puerto '7000'
$opts = array(
'socket' => array(
'bindto' => '0:7000',
),
);

// Creación del contexto...
$context = stream_context_create($opts);

// ...y se utiliza para recuperar los datos
echo file_get_contents('http://www.example.com', false, $context);

?>

add a note

User Contributed Notes 2 notes

up
9
mix at ater dot me
6 years ago
The right way for forcing IPv6 is 'bindto' => '[::]:0'
up
2
guru at jnt-finland dot fi
9 years ago
You can set "bindto" to "0:0" to force use IPv4 instead of IPv6. And probably "[0]:0" to force use IPv6, thou this I couldn't test.
To Top