Solved

socket timeout

Posted on 2006-11-23
6
1,146 Views
Last Modified: 2012-05-05
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
Comment
Question by:rares_dumitrescu
6 Comments
 
LVL 48

Accepted Solution

by:
hernst42 earned 500 total points
ID: 18002436
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
 
LVL 11

Expert Comment

by:ch2
ID: 18002511
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
 
LVL 7

Expert Comment

by:jdpipe
ID: 18006568
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

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Developers of all skill levels should learn to use current best practices when developing websites. However many developers, new and old, fall into the trap of using deprecated features because this is what so many tutorials and books tell them to u…
This article discusses how to create an extensible mechanism for linked drop downs.
Explain concepts important to validation of email addresses with regular expressions. Applies to most languages/tools that uses regular expressions. Consider email address RFCs: Look at HTML5 form input element (with type=email) regex pattern: T…
The viewer will learn how to count occurrences of each item in an array.

947 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

20 Experts available now in Live!

Get 1:1 Help Now