PHP Function Reference

PHP stream_socket_server() Function



The PHP stream_socket_server() function creates an Internet or Unix domain server socket on the specified local_socket. This function only creates a socket, to begin accepting connections use stream_socket_accept().

The 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 and 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.

Syntax

stream_socket_server(local_socket, $errno, 
                     errstr, flags, context)

Parameters

local_socket Required. Specify address to the socket to create to.
errno Optional. Will be set to the system level error that occurred in the system-level socket(), bind(), and listen() calls.
errstr Optional. Will be set to the system level error message that occurred in the system-level socket(), bind(), and listen() calls.
flags Optional. Specify a bitmask field which may be set to any combination of socket creation flags.
  • For UDP sockets, STREAM_SERVER_BIND must be used as the flags parameter.
Default is STREAM_SERVER_BIND | STREAM_SERVER_LISTEN.
context Optional. Specify the context resource created with stream_context_create() function.

Return Value

Returns the created stream, or false on error.

Exceptions

On failure the errno and errstr arguments 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. Please note that the errno and errstr arguments will always be passed by reference.

Example: stream_socket_server() example

The example below shows how to act as a time server which can respond to the time queries.

<?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);
}
?>

Example: using UDP server sockets

In the example below, the stream_socket_server() function is used with 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);
?>

Note: When specifying a numerical IPv6 address (e.g. fe80::1), the IP must be enclosed in square brackets, for example - tcp://[fe80::1]:80.

❮ PHP Streams Reference