Description
resource stream_socket_server
( string $local_socket
[, int &$errno
[, string &$errstr
[, int $flags= STREAM_SERVER_BIND | STREAM_SERVER_LISTEN
[, resource $context
]]]] )
Замечание:
For UDP sockets, you must use STREAM_SERVER_BIND as
the flags
parameter.
This function only creates a socket, to begin accepting connections
use stream_socket_accept().
If the call fails, it will return FALSE and 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.
Depending on the environment, Unix domain sockets may not be available.
A list of available transports can be retrieved using
stream_get_transports(). See
Список поддерживаемых транспортных протоколов for a list of bulitin transports.
Пример #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().
Замечание:
Most systems require root access to create a server socket on a port
below 1024.
Пример #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);
?>
Замечание: При указании числового адреса IPv6
(например, fe80::1) вы должны заключать его в квадратные скобки. Например,
tcp://[fe80::1]:80.
See also stream_socket_client(),
stream_set_blocking(),
stream_set_timeout(),
fgets(),
fgetss(), fwrite(),
fclose(), feof(), and
the Curl extension.