markt Posted August 10, 2006 Share Posted August 10, 2006 Hi everyoneI have written a script that connects to an xml service via a socket connection and sends and recieves data encrypted with GPG.The xml service runs as a daemon on a windows server (arrrgh) powered by .net and invariably crashes - which makes my socket connections run in an infinate loop - which creates more and more apache connections and eventually grinds the server to a half if apache is not restarted.The connections dont seem to be affected by the php.ini max_execution timout setting, nor anything else that I can find.Does anyone know how I can timeout a socket connection?Cheers Quote Link to comment Share on other sites More sharing options...
redarrow Posted August 10, 2006 Share Posted August 10, 2006 set_time_limit(0); Quote Link to comment Share on other sites More sharing options...
markt Posted August 10, 2006 Author Share Posted August 10, 2006 Errrm... no, that sets an unlimited execution time for a script - did you read my post ? Quote Link to comment Share on other sites More sharing options...
trq Posted August 10, 2006 Share Posted August 10, 2006 Can we see your code? You should be checking the connection is still true for each loop iteration yeah? Quote Link to comment Share on other sites More sharing options...
markt Posted August 11, 2006 Author Share Posted August 11, 2006 My code is: [code]function connect_to_socket () { $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); socket_set_nonblock($this -> SOCKET) or die("Unable to set nonblock on socket\n"); $time = time(); while (!@socket_connect($this -> SOCKET, $this -> IPADDRESS, $this->PORT)) { $err = socket_last_error($this -> SOCKET); if ($err == 115 || $err == 114){ if ((time() - $time) >= $this -> TIMEOUT){ socket_close($this -> SOCKET); // connection timed out return(false); } sleep(1); continue; } // connection refused return(false); } socket_close($socket); return (true);}[/code]This actually works for timing out the socket (improved from yesterday) but I now have issues with reading from the socket when I am using this method (non_block etc). Unfortunaly I dont understand too much about blocking and unblocking sockets and the php manual in non too detailed :/The code I am using to read/write from the socket (read called after writing data) is:[code]function read_from_socket() { while ($out = socket_read($this -> SOCKET, 12048)) { $response .= $out; } return ($response);}function write_to_socket($in="") { if (!socket_write($this -> SOCKET, $in, strlen($in))) { print ("Failed to send data"); }}[/code]The response is then acted upon, but the response returned when using nonblock is not the same as if I just do a plain connect (seems to be nothing returned).CheersMark Quote Link to comment Share on other sites More sharing options...
markt Posted August 14, 2006 Author Share Posted August 14, 2006 Hmmm I guess no one knows then :S Quote Link to comment 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.