(PHP 5, PHP 7)
stream_socket_server — Create an Internet or Unix domain server socket
$local_socket
[, int &$errno
[, string &$errstr
[, int $flags = STREAM_SERVER_BIND | STREAM_SERVER_LISTEN
[, resource $context
]]]] ) : resource
Creates a stream or datagram socket on the specified
local_socket.
This function only creates a socket, to begin accepting connections use stream_socket_accept().
local_socketThe type of socket created is determined by the transport specified using standard URL formatting: transport://target.
For Internet Domain sockets (AF_INET) such as TCP and UDP, the
target portion of the
remote_socket parameter should consist of a
hostname or IP address followed by a colon and a port number. For
Unix domain sockets, the target portion should
point to the socket file on the filesystem.
Depending on the environment, Unix domain sockets may not be available. A list of available transports can be retrieved using stream_get_transports(). See Lista de Transportes via Socket Suportados for a list of bulitin transports.
errno
If the optional errno and errstr
arguments are present they will be set to indicate the actual system
level error that occurred in the system-level socket(),
bind(), and listen() calls. If
the value returned in errno is
0 and the function returned FALSE, it is an
indication that the error occurred before the bind()
call. This is most likely due to a problem initializing the socket.
Note that the errno and
errstr arguments will always be passed by reference.
errstr
See errno description.
flagsA bitmask field which may be set to any combination of socket creation flags.
Nota:
For UDP sockets, you must use
STREAM_SERVER_BINDas theflagsparameter.
context
Returns the created stream, or FALSE on error.
Exemplo #1 Using TCP server sockets
<?php
$socket = stream_socket_server("tcp://0.0.0.0:8000", $errno, $errstr);
if (!$socket) {
echo "$errstr ($errno)<br />\n";
} else {
while ($conn = stream_socket_accept($socket)) {
fwrite($conn, 'The local time is ' . date('n/j/Y g:i a') . "\n");
fclose($conn);
}
fclose($socket);
}
?>
The example below shows how to act as a time server which can respond to time queries as shown in an example on stream_socket_client().
Nota: Most systems require root access to create a server socket on a port below 1024.
Exemplo #2 Using UDP server sockets
<?php
$socket = stream_socket_server("udp://127.0.0.1:1113", $errno, $errstr, STREAM_SERVER_BIND);
if (!$socket) {
die("$errstr ($errno)");
}
do {
$pkt = stream_socket_recvfrom($socket, 1, 0, $peer);
echo "$peer\n";
stream_socket_sendto($socket, date("D M j H:i:s Y\r\n"), 0, $peer);
} while ($pkt !== false);
?>
Nota: Quando informando endereços IPv6 numéricos (por exemplo, fe80::1), você precisa englobar o IP entre colchetes. Exemplo: tcp://[fe80::1]:80.