PHP Function Reference

PHP stream_socket_pair() Function



The PHP stream_socket_pair() function creates a pair of connected, indistinguishable socket streams. This function is commonly used in IPC (Inter-Process Communication).

Syntax

stream_socket_pair(domain, type, protocol)

Parameters

domain Required. Specify the protocol family to be used. It can be one of the following:
  • STREAM_PF_INET - Internet Protocol Version 4 (IPv4).
  • STREAM_PF_INET6 - Internet Protocol Version 6 (IPv6).
  • STREAM_PF_UNIX - Unix system internal protocols.
type Required. Specify the type of communication to be used. It can be one of the following:
  • STREAM_SOCK_DGRAM - Provides datagrams, which are connectionless messages (UDP, for example).
  • STREAM_SOCK_RAW - Provides a raw socket, which provides access to internal network protocols and interfaces. Usually this type of socket is just available to the root user.
  • STREAM_SOCK_RDM - Provides a RDM (Reliably-delivered messages) socket.
  • STREAM_SOCK_SEQPACKET - Provides a sequenced packet stream socket.
  • STREAM_SOCK_STREAM - Provides sequenced, two-way byte streams with a transmission mechanism for out-of-band data (TCP, for example).
protocol Required. Specify the protocol to be used. It can be one of the following:
  • STREAM_IPPROTO_ICMP - Provides a ICMP socket.
  • STREAM_IPPROTO_IP - Provides a IP socket.
  • STREAM_IPPROTO_RAW - Provides a RAW socket.
  • STREAM_IPPROTO_TCP - Provides a TCP socket.
  • STREAM_IPPROTO_UDP - Provides a UDP socket.

Return Value

Returns an array with the two socket resources on success, or false on failure.

Example: stream_socket_pair() example

The example below shows the usage of stream_socket_pair() function in Inter-Process Communication.

<?php
$sockets = stream_socket_pair(STREAM_PF_UNIX, 
               STREAM_SOCK_STREAM, STREAM_IPPROTO_IP);
$pid = pcntl_fork();

if ($pid == -1) {
  die('could not fork');
} else if ($pid) {
  //parent
  fclose($sockets[0]);

  fwrite($sockets[1], "child PID: $pid\n");
  echo fgets($sockets[1]);

  fclose($sockets[1]);
} else {
  //child
  fclose($sockets[1]);

  fwrite($sockets[0], "message from child\n");
  echo fgets($sockets[0]);

  fclose($sockets[0]);
}
?>

The output of the above code will be similar to:

child PID: 1378
message from child

❮ PHP Streams Reference