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 Link to comment https://forums.phpfreaks.com/topic/17113-sockets-slowing-down-apache/ Share on other sites More sharing options...
redarrow Posted August 10, 2006 Share Posted August 10, 2006 set_time_limit(0); Link to comment https://forums.phpfreaks.com/topic/17113-sockets-slowing-down-apache/#findComment-72371 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 ? Link to comment https://forums.phpfreaks.com/topic/17113-sockets-slowing-down-apache/#findComment-72420 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? Link to comment https://forums.phpfreaks.com/topic/17113-sockets-slowing-down-apache/#findComment-72467 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 Link to comment https://forums.phpfreaks.com/topic/17113-sockets-slowing-down-apache/#findComment-72937 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 Link to comment https://forums.phpfreaks.com/topic/17113-sockets-slowing-down-apache/#findComment-74402 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.