PHP Streams函数

PHP stream_socket_pair() 函数创建一对连接的、无法区分的套接字流。该函数常用于IPC(进程间通信)。

语法

stream_socket_pair(domain, type, protocol) 

参数

domain必填。 指定要使用的协议族。它可以是以下之一:
  • STREAM_PF_INET - Internet 协议版本 4 (IPv4)。
  • STREAM_PF_INET6 - Internet 协议版本6 (IPv6)。
  • STREAM_PF_UNIX - Unix 系统内部协议。
type必填。 指定要使用的通信类型。它可以是以下之一:
  • STREAM_SOCK_DGRAM - 提供数据报,这是无连接消息(例如 UDP)。
  • STREAM_SOCK_RAW  - 提供原始套接字,提供对内部网络协议和接口的访问。通常这种类型的套接字仅供 root 用户使用。
  • STREAM_SOCK_RDM - 提供 RDM(可靠传递消息)套接字。
  • STREAM_SOCK_SEQPACKET - 提供排序的数据包流套接字。
  • STREAM_SOCK_STREAM - 提供排序的双向字节流,以及带外数据(TCP ,例如)。
protocol必需。 指定要使用的协议。它可以是以下之一:
  • STREAM_IPPROTO_ICMP - 提供 ICMP 套接字。
  • STREAM_IPPROTO_IP - 提供 IP 套接字。
  • STREAM_IPPROTO_RAW - 提供 RAW 套接字。
  • STREAM_IPPROTO_TCP - 提供 TCP 套接字。
  • STREAM_IPPROTO_UDP - 提供 UDP 套接字。

返回值

返回一个成功时包含两个套接字资源的数组,失败时返回 false。

示例:stream_socket_pair() 示例

下面的示例显示了stream_socket_pair() 的用法 进程间通信中的函数。

<?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) {
  //父级
  fclose($sockets[0]);

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

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

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

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

上述代码的输出将类似于:

child PID: 1378
message from child