查詢

socket_create_pair()函式—用法及示例

「 建立一對相互連線的套接字,這兩個套接字可以用於在同一程序內進行通訊 」


函式名: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() 等待子程序結束。

補充糾錯
上一個函式: socket_export_stream()函式
下一個函式: socket_create_listen()函式
熱門PHP函式
分享連結