Jump to content

Sockets slowing down apache


markt

Recommended Posts

Hi everyone

I 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

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).

Cheers

Mark


Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.