$server_socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("socket_create()failed.");
socket_bind($server_socket, $bind_address, $port) or die("socket_bind()failed");
socket_listen($server_socket, 5) or die("socket_listen()failed");
// Stop socket from handing when killed
socket_set_block($server_socket);
socket_set_option($server_socket, SOL_SOCKET, SO_LINGER, array('l_onoff' => 1, 'l_linger' => 0));
$droid->notify("Running", "Server is up and running ....");
$droid->view("http://localhost:{$port}/start", "text/html");
$running = true;
do {
    if (($socket = socket_accept($server_socket)) < 0) {
        echo "socket_accept() failed \r\n";
        break;
    }
    $request = new Request();
    $request->setSocket($socket);
    $request->getBuffer();
    $request->parseBuffer();
    $response = new Response();
    $response->setRequest($request);
    if (class_exists($request->getUri())) {
        $handler_name = $request->getUri();
        $handler = new $handler_name();
        $response->setHandler($handler);
    } else {
        // TODO: 404
        echo "cannot find class " . $request->getUri();
    }
    $response->sendData();
    unset($response);
} while ($running);