开发者

php socket server check client is connected or not

this socket server is working fine but dont understand how to check if client is still connected if not close conection can any body help to check if client is still connected if no how to close that connection

thanks

<?php
  // PHP SOCKET SERVER

 // Configuration variables
  $host = "127.0.0.1";
  $port = 3000;
  $max = 5000;
  $client = array();

  // No timeouts, flush content immediatly
  @set_time_limit(0);
  ob_implicit_flush();

  // Server functions
    // Create socket
  $sock = @socket_create(AF_INET, SOCK_STREAM, 0) or die("[" . date('Y-m-d H:i:s') . "] Could not create socket\n");
  // Bind to socket
  socket_bind($sock, $host, $port) or die("[" . date('Y-m-d H:i:s') . "] Could not bind to socket\n");
  // Start listening
  socket_listen($sock) or die("[" . date('Y-m-d H:i:s') . "] Could not set up socket listener\n");

  rLog("Server started at " . $host . ":" . $port);
  // Server loop
  while (true) {
      socket_set_block($sock);
      // Setup clients listen socket for reading
      $read[0] = $sock;
      for ($i = 0; $i < $max; $i++) {
          if (@$client[$i]['sock'] != null)
              $read[$i + 1] = $client[$i]['sock'];
      }
      // Set up a blocking call to socket_select()
      $ready = socket_select($read, $write = null, $except = null, $tv_sec = null);
      // If a new connection is being made add it to the clients array
      if (in_array($sock, $read)) {
          for ($i = 0; $i < $max; $i++) {
              if (@$client[$i]['sock'] == null) {
                  if (($client[$i]['sock'] = socket_accept($sock)) < 0) {
                      rLog("socket_accept() failed: " . socket_strerror($client[$i]['sock']));
                  } else {

                      rLog("Client #" . $i . " connected");
                  }
                  break;
              } elseif ($i == $max - 1) {
                  rLog("Too many clients");
              }
          }
          if (--$ready <= 0)
              continue;
      }
      for ($i = 0; $i < $max; $i++) {
          if (in_array(@$client[$i]['sock'], $read)) {
              $input = socket_read($client[$i]['sock'], 1024);
              $n = trim($input);
              if ($input) {
                  // Strip whitespaces and write back to user
                  // Respond to commands
                  /*$output = ereg_replace("[ \t\n\r]","",$input).chr(0);
                   socket_write($client[$i]['sock'],$开发者_开发问答output);*/

                   $processRe = processRequest($input);
                    sendMessage($client[$i]['sock'],$processRe);

              }
          } else {

              //if($client[$i]['sock']!=null){
              // Close the socket
              //socket_close($client[$i]['sock']);
              //unset($client[$i]);
              //rLog("Disconnected(1) client #".$i);
              //}
          }
      }
  }
 socket_close($sock);
?>


When client close connection, then socket_select funcion will be return and specified socket handle to client will be available for socket_read when you call socket_read you will get FALSE, this mean client closed connection.

But when client is connected, you can close connection by caling socket_close function on his client socket handle.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜