RoyHB Posted July 29, 2011 Share Posted July 29, 2011 I connect to a server using fsockopen, then read lines of ASCII from the server forever or until feof(). The server either sends data or else if no data available it sends a keep alive string every 30 seconds or so. I'm using a blocking read (fgets(). I'd like to have a timeout occur is nothing is received by the fgets() in n seconds. Presumably if no data and no blank record then the connection has failed and I can try to reconnect. How can I get the fgets read to time out after some number of seconds if nothing is received? (or should I be using some other sort of read?) error_reporting(E_ERROR | E_PARSE | E_NOTICE); while (true) { $connected = FALSE; while ( ! $connected) { $handle = fsockopen("server.someplace.com",21798,$sockErrno,$sockErrStr); if (! $handle) { echo "Not connected yet, errno = ".$sockErrno.":".$sockErrStr."".PHP_EOL; $sleepTime = 30; while ($sleepTime > 0) { echo " Sleeping: ".$sleepTime. " seconds ".chr(13); sleep(1); $sleepTime --; } // while sleeptime } // ! connected else $connected = TRUE; } // Now connected - alert the console and process reads echo chr(7);sleep(1);echo chr(7);sleep(1);echo chr(7); $fileName = "/localDir/localFile/data.txt"; $fh = fopen($fileName,"a"); fwrite($fh,"Connection established at ". date("m-d H:i:s") . PHP_EOL); while ( ! feof($handle)) { $a=""; $a = fgets($handle,256); if (strlen($a) == 0) { echo "Received keepalive packet".PHP_EOL; } else { echo "Received: " . $a . " Length of received buffer = ". strlen($a) . PHP_EOL; fwrite($fh,$a); } } fclose($fh); } Quote Link to comment https://forums.phpfreaks.com/topic/243154-stream-timeout-during-blocking-read/ Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.