downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | conferences | my php.net

search for in the

socket_clear_error> <socket_accept
[edit] Last updated: Fri, 07 Jun 2013

view this page in

socket_bind

(PHP 4 >= 4.1.0, PHP 5)

socket_bindVincula un nombre a un socket

Descripción

bool socket_bind ( resource $socket , string $address [, int $port = 0 ] )

Vincula el nombre dado en address al socket descrito por socket. Esto tiene que ser hecho antes de establecer una conexión usando socket_connect() o socket_listen().

Parámetros

socket

Un recurso socket válido creado con socket_create().

address

Si el socket es de la familia AF_INET, address es una IP en notación decimal con puntos (p.ej. 127.0.0.1).

Si el socket es de la familia AF_UNIX, address es una ruta de un socket de dominio Unix (p.ej. /tmp/my.sock).

port (Optional)

El parámetro port sólo se usa cuando se vincula un socket AF_INET, y designa el puerto en el que escuchar conexiones.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

El código de error se puede recuperar con socket_last_error(). Este código puede pasarse a socket_strerror() para obtener una explicación textual del error.

Ejemplos

Ejemplo #1 Usar socket_bind() para establecer la dirección de origen

<?php
// Crear un nuevo socket
$sock socket_create(AF_INETSOCK_STREAMSOL_TCP);

// Una lista de ejemplo de direcciones IP pertenecientes al ordenador
$sourceips['kevin']    = '127.0.0.1';
$sourceips['madcoder'] = '127.0.0.2';

// Vincular la dirección de origen
socket_bind($sock$sourceips['madcoder']);

// Conectar a la dirección de destino
socket_connect($sock'127.0.0.1'80);

// Escribir
$request 'GET / HTTP/1.1' "\r\n" .
           
'Host: example.com' "\r\n\r\n";
socket_write($sock$request);

// Cerrar
socket_close($sock);

?>

Notas

Nota:

ESta función se debe usar sobre el socket antes de socket_connect().

Nota:

Observación de compatibilidad con Windows 9x/ME: socket_last_error() puede devolver un código de error no válido si intenta vincular el socket a una dirección errónea que no pertenece a su máquina.

Ver también



socket_clear_error> <socket_accept
[edit] Last updated: Fri, 07 Jun 2013
 
add a note add a note User Contributed Notes socket_bind - [6 notes]
up
1
dresende at thinkdigital dot pt
1 year ago
Regarding previous post:

"0" has address is no different from "0.0.0.0"

127.0.0.1 -> accept only from local host
w.x.y.z (valid local IP) -> accep only from this network
0.0.0.0 -> accept from anywhere
up
1
Mex
1 year ago
It appears for the $address parameter:

'127.0.0.1'
accepts clients from localhost (eg. 127.0.0.1)

'0.0.0.0'
accepts clients from localhost, and the server's network (eg. 127.0.0.1, 192.168.2.5, 10.20.30.40)

'0' or 0
accepts clients from localhost, the server's network, and external networks (eg. 127.0.0.1, 192.168.2.5, 10.20.30.40, 209.85.169.99)
up
0
keksov[at]gmx.de
11 years ago
If you want to reuse address and port, and get rid of error: unable to bind, address already in use, you have to use socket_setopt (check actual spelling for this function in you PHP verison) before calling bind:

<?php
if (!socket_set_option($sock, SOL_SOCKET, SO_REUSEADDR, 1)) {
    echo
socket_strerror(socket_last_error($sock));
    exit;
}
?>

This solution was found by
Christophe Dirac. Thank you Christophe!
up
0
php50613160534 dot 3 dot korkman at spamgourmet dot org
8 years ago
Use 0 for port to bind a random (free) port for incoming connections:

socket_bind ($socket, $bind_address, 0);
socket_getsockname($socket, $socket_address, $socket_port);
socket_listen($socket);
...

$socket_port contains the assigned port, you might want to send it to a remote client connecting. Tested with php 5.03.
up
0
gasket at cekkent dot net
10 years ago
The aforementioned tidbit about using NULL to bind to all addresses did not work for me, as I would receive an error about unknown address. Using a 0 worked for me:

socket_bind ($socket, 0, $port)

This also allows you to receive UDP broadcasts, which is what I had been trying to figure out.
up
-1
Takigama
1 year ago
Its worth noting that if your trying to bind a port for ipv6, you need to use "::0" if you wish to bind all interfaces, for example:

$sock = socket_create(AF_INET6, SOCK_DGRAM, SOL_UDP);
$err = socket_bind($sock, "::0", 34000);

Would bind ipv6 udp port 34000 on all interfaces.

 
show source | credits | sitemap | contact | advertising | mirror sites