while (true) {
  $read = array_merge([$server], $clients);
  $write = null;
  $except = null;
  socket_select($read, $write, $except, null);
 
  if (in_array($server, $read)) {
    $clients[] = connect($server);
  }
  foreach ($clients as $key => $client) {
    if (!in_array($client, $read)) {
      continue;
    }
    $request = socket_read($client, 65536);
    if ($request === '' || $request === false) {
      socket_close($client);
      unset($clients[$key]);
      continue;
    }
    $message = decode($request);
    foreach ($clients as $other) {
      if ($other !== $client) {
        socket_write($other, encode($message));
      }
    }
  }
}