Socket 函数
在线手册:中文  英文

socket_bind

(PHP 4 >= 4.1.0, PHP 5)

socket_bindBinds a name to a socket

说明

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

Binds the name given in address to the socket described by socket. This has to be done before a connection is be established using socket_connect() or socket_listen().

参数

socket

A valid socket resource created with socket_create().

address

If the socket is of the AF_INET family, the address is an IP in dotted-quad notation (e.g. 127.0.0.1).

If the socket is of the AF_UNIX family, the address is the path of a Unix-domain socket (e.g. /tmp/my.sock).

port (Optional)

The port parameter is only used when binding an AF_INET socket, and designates the port on which to listen for connections.

返回值

成功时返回 TRUE, 或者在失败时返回 FALSE

The error code can be retrieved with socket_last_error(). This code may be passed to socket_strerror() to get a textual explanation of the error.

范例

Example #1 Using socket_bind() to set the source address

<?php
// Create a new socket
$sock socket_create(AF_INETSOCK_STREAMSOL_TCP);

// An example list of IP addresses owned by the computer
$sourceips['kevin']    = '127.0.0.1';
$sourceips['madcoder'] = '127.0.0.2';

// Bind the source address
socket_bind($sock$sourceips['madcoder']);

// Connect to destination address
socket_connect($sock'127.0.0.1'80);

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

// Close
socket_close($sock);

?>

注释

Note:

This function must be used on the socket before socket_connect().

Note:

Windows 9x/ME compatibility note: socket_last_error() may return an invalid error code if trying to bind the socket to a wrong address that does not belong to your machine.

参见


Socket 函数
在线手册:中文  英文

用户评论:

gabriel at plenitech dot fr (2013-06-23 12:29:48)

When doing Unix sockets, it might be necessary to chmod the socket file so as to give Write permission to Group and/or Others. Otherwise, only the owner is allowed to write data into the stream.

Example:

<?php
$sockpath 
'/tmp/my.sock';
socket_bind($socket$sockpath);
//here: write-only (socket_send) to others, only owner can fetch data.
chmod($sockpath0702);
?>

Takigama (2012-03-30 06:34:07)

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.

dresende at thinkdigital dot pt (2011-11-21 09:39:21)

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

Mex (2011-09-13 17:25:40)

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)

php50613160534 dot 3 dot korkman at spamgourmet dot org (2005-06-13 06:16:16)

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.

gasket at cekkent dot net (2003-05-03 18:19:17)

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.

keksov[at]gmx.de (2002-06-10 11:22:22)

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($sockSOL_SOCKETSO_REUSEADDR1)) {
    echo 
socket_strerror(socket_last_error($sock));
    exit;
}
?>

This solution was found by 
Christophe Dirac. Thank you Christophe!

易百教程