函式名:EventUtil::setSocketOption()
適用版本:PHP 5 >= 5.4.0, PECL libevent >= 0.0.1
用法:EventUtil::setSocketOption(resource $socket, int $level, int $optname, mixed $optval)
該函式用於設定套接字選項。它可以用於設定與套接字相關的不同選項,例如調整接收和傳送緩衝區大小,啟用非阻塞模式,設定超時等。
引數:
- $socket:套接字資源,使用 event_buffer_socket_new() 或 event_buffer_ssl_socket_new() 建立。
- $level:選項所在的協議級別。通常是 SOL_SOCKET。
- $optname:選項的名稱,如 SO_RCVBUF、SO_RCVTIMEO 等。
- $optval:選項的值。根據選項不同,可以是 int、bool 或 string 型別。
返回值:設定成功返回 TRUE,設定失敗返回 FALSE。
示例:
$base = new EventBase();
$socket = stream_socket_server('tcp://localhost:8000', $errno, $errstr);
stream_set_blocking($socket, 0);
$event = new Event($base, $socket, Event::READ | Event::PERSIST, function($socket, $flag, $base) {
// 讀取客戶端傳送的資料
$clientSocket = stream_socket_accept($socket);
$data = fread($clientSocket, 1024);
echo "Received data: " . $data . PHP_EOL;
// 設定 SO_RCVTIMEO 選項,接收超時時間為 5 秒
EventUtil::setSocketOption($clientSocket, SOL_SOCKET, SO_RCVTIMEO, 5);
// 繼續監聽客戶端資料
Event::add($base, $socket, Event::READ | Event::PERSIST, $base->func, $base);
});
// 開始事件迴圈
$base->loop();
上述示例建立了一個 TCP 伺服器,並使用 EventUtil::setSocketOption() 設定了 SO_RCVTIMEO 選項,將接收超時時間設定為 5 秒。這樣,在呼叫 fread() 函式時,如果 5 秒內沒有接收到資料,將會超時返回。透過使用該函式,可以根據實際需求調整套接字的不同選項,並對網路通訊進行更加靈活的控制。