public static function serve() { $options = self::$_options; $sock = self::$_socket; $bound = socket_bind($sock, $options['bind_address'], $options['listen_port']); if (!$bound) { return; } socket_listen($sock); echo "Server is listening on port " . $options['listen_port'] . PHP_EOL; while (self::$_continue) { $childSocket = socket_accept($sock); $input = socket_read($childSocket, 1024); if ($input) { $request = new Pebble_Http_Request($input); if ($options['verbose']) { echo $request; } try { $response = self::$_dispatcher->dispatch($request); } catch (Exception $e) { echo "Uncaught Exception: " . $e->getMessage() . PHP_EOL; $response = new Pebble_Http_Response(); $response->setStatusCode(Pebble_Http_Response::HTTP_STATUS_SERVER_ERROR); } if ($options['verbose']) { echo " (" . $response->getStatusCode() . ")" . PHP_EOL; } socket_write($childSocket, $response->__toString()); socket_close($childSocket); unset($childSocket); } else { echo "Socket Error: " . socket_last_error($childSocket) . "\n"; } } socket_close(self::$_socket); }