函式: socket_get_status()
適用版本: PHP 4 >= 4.2.0, PHP 5, PHP 7
用法: socket_get_status(resource $socket): array|false
描述: socket_get_status() 函式用於返回一個套接字的狀態資訊。它通常用於檢查套接字是否處於可讀、可寫或處於異常狀態。
引數:
- $socket: 必需,一個有效的套接字資源,透過 socket_create() 或 socket_accept() 返回。
返回值:
- 如果成功,返回一個包含套接字狀態資訊的關聯陣列。
- 如果失敗,返回 false。
狀態資訊陣列包含以下鍵值對:
- 'stream_type': 套接字的型別,可能是 'tcp_socket'、'udp_socket' 等。
- 'mode': 套接字的模式,可能是 'r'、'w' 或 'a',分別表示套接字是否可讀、可寫或可讀可寫。
- 'unread_bytes': 在套接字緩衝區中尚未讀取的位元組數。
- 'seekable': 套接字是否支援隨機訪問。
- 'timed_out': 套接字是否在超時狀態。
- 'blocked': 套接字是否處於阻塞狀態。
- 'eof': 是否已到達套接字的末尾。
- 'options': 套接字的選項設定。
示例:
// 建立一個TCP套接字
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
die("socket_create() 失敗: " . socket_strerror(socket_last_error()));
}
// 連線到伺服器
$result = socket_connect($socket, '127.0.0.1', 8080);
if ($result === false) {
die("socket_connect() 失敗: " . socket_strerror(socket_last_error($socket)));
}
// 傳送資料
$message = "Hello, server!";
socket_write($socket, $message, strlen($message));
// 檢查套接字狀態
$status = socket_get_status($socket);
if ($status !== false) {
echo "套接字型別: " . $status['stream_type'] . "\n";
echo "套接字模式: " . $status['mode'] . "\n";
echo "未讀取位元組數: " . $status['unread_bytes'] . "\n";
echo "是否可隨機訪問: " . ($status['seekable'] ? "是" : "否") . "\n";
echo "是否超時: " . ($status['timed_out'] ? "是" : "否") . "\n";
echo "是否阻塞: " . ($status['blocked'] ? "是" : "否") . "\n";
echo "是否已到達末尾: " . ($status['eof'] ? "是" : "否") . "\n";
echo "套接字選項: " . implode(", ", $status['options']) . "\n";
} else {
echo "獲取套接字狀態失敗\n";
}
// 關閉套接字
socket_close($socket);
上述示例建立了一個TCP套接字,並連線到本地伺服器。然後,使用 socket_get_status() 函式獲取套接字的狀態資訊,並輸出到控制檯。最後,關閉套接字。
請注意,示例中的錯誤處理是簡化的,實際使用時應該根據具體情況進行適當的錯誤處理和異常處理。