函式名:socket_create_pair()
適用版本:PHP 4, PHP 5, PHP 7
函式描述:socket_create_pair() 函式用於建立一對相互連線的套接字,這兩個套接字可以用於在同一程序內進行通訊。
語法:bool socket_create_pair(int $domain, int $type, int $protocol, array &$fd)
引數:
- $domain:套接字的協議域。支援的協議域包括 AF_INET(IPv4 網路協議)、AF_INET6(IPv6 網路協議)和 AF_UNIX(本地 UNIX 檔案系統套接字)。
- $type:套接字的型別。支援的套接字型別包括 SOCK_STREAM(流式套接字,可靠的、面向連線的套接字)和 SOCK_DGRAM(資料包套接字,無連線的、不可靠的套接字)。
- $protocol:套接字的協議。可以是 IPPROTO_TCP(TCP 協議)或者 IPPROTO_UDP(UDP 協議)。
- $fd:包含兩個套接字檔案描述符的陣列。建立成功後,第一個套接字的檔案描述符會儲存在 $fd[0],而第二個套接字的檔案描述符會儲存在 $fd[1]。
返回值:如果成功建立了一對相互連線的套接字,則返回 true。如果發生錯誤,則返回 false。
示例:
// 建立一對相互連線的套接字
if (socket_create_pair(AF_UNIX, SOCK_STREAM, 0, $fd) === false) {
echo "套接字建立失敗: " . socket_strerror(socket_last_error()) . "\n";
exit;
}
// 在兩個套接字之間進行通訊
$pid = pcntl_fork();
if ($pid == -1) {
echo "程序建立失敗\n";
exit;
} elseif ($pid == 0) {
// 子程序
$message = "Hello from child process!";
socket_write($fd[0], $message, strlen($message));
exit;
} else {
// 父程序
$message = socket_read($fd[1], 1024);
echo "接收到的訊息: " . $message . "\n";
pcntl_wait($status); // 等待子程序結束
exit;
}
以上示例中,首先使用 socket_create_pair() 建立了一對相互連線的套接字,並將兩個套接字的檔案描述符儲存在 $fd 陣列中。然後,透過 pcntl_fork() 建立了一個子程序,子程序向父程序傳送了一條訊息。父程序透過 socket_read() 讀取子程序傳送的訊息,並輸出到控制檯。最後,透過 pcntl_wait() 等待子程序結束。