在 PHP 網絡編程中,settimeout()
函數用于設置套接字(socket)的超時選項
以下是一個使用 settimeout()
函數的示例:
<?php
// 創建一個 TCP/IP 套接字
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
exit;
}
// 連接到遠程服務器
$result = socket_connect($socket, "127.0.0.1", 80);
if ($result === false) {
echo "socket_connect() failed.\nReason: ($result) " . socket_strerror(socket_last_error($socket)) . "\n";
exit;
}
// 設置套接字的接收和發送超時
$timeout = array('sec' => 10, 'usec' => 500000); // 設置為 10 秒 500 毫秒
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, $timeout);
socket_set_option($socket, SOL_SOCKET, SO_SNDTIMEO, $timeout);
// 向服務器發送數據
$data = "GET / HTTP/1.1\r\nHost: 127.0.0.1\r\nConnection: Close\r\n\r\n";
socket_write($socket, $data);
// 從服務器接收數據
$response = '';
while ($buffer = socket_read($socket, 4096)) {
$response .= $buffer;
}
// 關閉套接字
socket_close($socket);
// 輸出服務器響應
echo $response;
?>
在這個示例中,我們首先創建了一個 TCP/IP 套接字,然后連接到本地服務器。接著,我們使用 socket_set_option()
函數設置套接字的接收和發送超時。最后,我們向服務器發送數據并接收響應,然后關閉套接字。
注意:在實際應用中,你可能需要根據實際情況調整超時值。過短的超時時間可能導致套接字過早地超時,而過長的超時時間可能導致程序在等待響應時變得不夠靈活。