Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

PHP Network socket_set_timeout() Function



The PHP Network socket_set_timeout() function is used to specify how long a socket connection can wait before terminating. It's an alias for the stream_set_timeout() method, which works with stream resources. This function is useful for dealing with sockets, such as connecting to a server or exchanging data. It ensures that the program does not hang indefinitely if the connection takes too long.

For example, if a server takes a long time to answer, you can set a timeout to stop waiting after a predetermined amount of seconds. This helps your application run more smoothly. The socket_set_timeout method is present in PHP versions ranging from 4 to 8. It supports network tasks such as downloading files or talking with servers. You can mention the timeout value in seconds and microseconds. This gives you control over how long your program should wait.

Syntax

Below is the syntax of the PHP Network socket_set_timeout() function −

bool socket_set_timeout(resource $stream, int $seconds, int $microseconds = 0)

Parameters

Here are the parameters of the socket_set_timeout() function −

  • $stream − (Required) The socket or stream resource you want to set the timeout for.

  • $seconds − (Required) The number of seconds to wait before timing out.

  • $microseconds − (Optional) Additional time in microseconds (1 second = 1,000,000 microseconds).

Return Value

The socket_set_timeout() function returns TRUE if the timeout is set successfully. And returns FALSE if there is an error while setting the timeout.

PHP Version

First introduced in core PHP 4, the socket_set_timeout() function continues to function easily in PHP 5, PHP 7, and PHP 8.

Example 1

Here is the basic example of the PHP Network socket_set_timeout() function. In this example a socket is created to connect to a server. The timeout is set to 5 seconds. If the server does not respond within this time range, the connection will be terminated.

<?php
   // Create a socket connection to the server
   $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

   // Connect to the server
   socket_connect($socket, "127.0.0.1", 80);

   // Set the timeout to 5 seconds
   socket_set_timeout($socket, 5);

   // Send some data to the server
   socket_write($socket, "GET / HTTP/1.1\r\n");

   // Close the socket
   socket_close($socket);
?>

Output

Here is the outcome of the following code −

socket_create(): Unable to create socket [Address already in use]

Example 2

In the below PHP code we will use the socket_set_timeout() function and a socket connects to the server and waits for data for two seconds. If no data is received during the timeout period, it shows the message "Socket timed out".

<?php
   $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
   socket_connect($socket, "127.0.0.1", 80);

   // Set a timeout of 2 seconds
   socket_set_timeout($socket, 2);

   $data = socket_read($socket, 1024);

   if ($data === false) {
      echo "Socket timed out.\n";
   } else {
      echo "Data received: $data\n";
   }

   socket_close($socket);
?> 

Output

This will generate the below output −

Socket timed out.

Example 3

In this example, a loop makes three attempts to read data from the connection, each with a one-second timeout. If a timeout occurs, it shows the number of tries. If data is received, the loop ends and the results are printed. The socket is closed at the end.

<?php
   $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
   socket_connect($socket, "127.0.0.1", 80);

   // Set a 1-second timeout
   socket_set_timeout($socket, 1);

   $attempts = 0;
   $maxAttempts = 3;
   while ($attempts < $maxAttempts) {
      $data = socket_read($socket, 1024);
      if ($data === false) {
         echo "Attempt $attempts: Timeout occurred\n";
      } else {
         echo "Data received: $data\n";
         break;
      }
      $attempts++;
   }

   socket_close($socket);
?> 

Output

This will create the below output −

Attempt 0: Timeout occurred
Attempt 1: Timeout occurred
Attempt 2: Timeout occurred
php_function_reference.htm
Advertisements