Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1200
  • Last Modified:

socket timeout

function connect($ip, $port) {
        global $sock;
        $sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
        socket_connect($sock, "$ip", $port);
        switch(socket_select($r = array($sock), $w = array($sock), $f = array($sock), 1))
        {
                case 1:
                        echo "Connected\n";
                        return 1;
                        break;
                case 0:
                        error("Unable to connect");
                        return;
                        break;
                case 2:
                        error("Unable to connect");
                        return;
                        break;
        }
        return;
}

I have this function to connect to a socket, but i want to have a timeout, if it doesen`t connects in 15 seconds to say Timeout
0
rares_dumitrescu
Asked:
rares_dumitrescu
1 Solution
 
hernst42Commented:
see: http://de3.php.net/manual/en/function.socket-connect.php#56864 how to catch an timeout

global $sock;
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_nonblock($sock);
socket_connect($sock, "$ip", $port);
socket_set_block($sock);
switch(socket_select($r = array($sock), $w = array($sock), $f = array($sock), 5))
{
       case 2:
               echo "[-] Connection Refused\n";
               break;
       case 1:
               echo "[+] Connected\n";
               break;
       case 0:
               echo "[-] Timeout\n";
               break;
}
0
 
ch2Commented:
You could also use fsockopen or pfsockopen for persistent connection, you can specify the timeout.

http://en.php.net/manual/en/function.pfsockopen.php
http://en.php.net/manual/en/function.fsockopen.php

You can specify the timeout. Look at the examples on the above links.

$fp = fsockopen("www.example.com", 80, $errno, $errstr, 15);


Hope this helps
0
 
jdpipeCommented:
How about this though?

http://au3.php.net/manual/en/function.stream-set-timeout.php

Example 1. stream_set_timeout() example
<?php
$fp = fsockopen("www.example.com", 80);
if (!$fp) {
   echo "Unable to open\n";
} else {

   fwrite($fp, "GET / HTTP/1.0\r\n\r\n");
   stream_set_timeout($fp, 2);
   $res = fread($fp, 2000);

   $info = stream_get_meta_data($fp);
   fclose($fp);

   if ($info['timed_out']) {
       echo 'Connection timed out!';
   } else {
       echo $res;
   }

}
?>
0

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Tackle projects and never again get stuck behind a technical roadblock.
Join Now