示例#1
0
function pfsockopen_random_port(&$fsock, $address)
{
    $fsock = false;
    for ($i = 0; $i < 100; $i++) {
        $port = get_random_port();
        $fsock = @pfsockopen($address, $port);
        if ($fsock !== false) {
            return $port;
        }
    }
    return 0;
}
function retry_bind_server()
{
    for ($i = 0; $i < 20; ++$i) {
        $port = get_random_port();
        $address = "tcp://127.0.0.1:" . $port;
        $server = @stream_socket_server($address);
        if ($server !== false) {
            return array($port, $address, $server);
        }
    }
    throw new Exception("Couldn't bind server");
}
示例#3
0
function retry_bind_server6($udp = false)
{
    for ($i = 0; $i < 20; ++$i) {
        $port = get_random_port();
        $scheme = $udp ? "udp://" : "tcp://";
        $address = $scheme . "[::1]:" . $port;
        if ($udp) {
            $server = @stream_socket_server($address, $errno, $errstr, STREAM_SERVER_BIND);
        } else {
            $server = @stream_socket_server($address);
        }
        if ($server !== false) {
            return array($port, $address, $server);
        }
    }
    throw new Exception("Couldn't bind server");
}
示例#4
0
function runTest($testName, $testController)
{
    try {
        $serverPort = get_random_port();
        $adminPort = get_random_port();
        while ($adminPort === $serverPort) {
            $adminPort = get_random_port();
        }
        $debugPort = get_random_port();
        while ($debugPort === $serverPort || $debugPort === $adminPort) {
            $debugPort = get_random_port();
        }
        $pid = posix_getpid();
        $serverProc = null;
        $clientProcessId = 0;
        $serverProc = startServer($serverPort, $adminPort, $debugPort);
        waitForServerToGetGoing($serverPort);
        startDebuggerClient($debugPort, "/debugger/{$testName}.in", $pipes);
        $clientProcessId = getClientProcessId($pipes[1]);
        if (!$clientProcessId || ($clientProcessId = intval($clientProcessId)) <= 0) {
            tlog('Failed to communicate with the debugger client process');
            dumpLogFilesToStdoutAndDie();
        }
        tlog("Debugger client process id = {$clientProcessId}");
        $testController($pipes[1], $clientProcessId, $serverPort);
        // Echo stderr, just in case.
        // (It was redirected to stdout, so this should be empty).
        echo stream_get_contents($pipes[2]);
        stopServer($adminPort);
    } catch (Exception $e) {
        error_log("Caught exception, test failed, pid={$pid}");
        killChildren(posix_getpid());
        error_log('test failed');
    }
}