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.
精彩评论