0

当一个程序通过 FastCGI 启动时,它会在一个已经打开的套接字与 Web 服务器对话的情况下执行。套接字的文件描述符编号被传递给程序,但是如何将其转换为 Java 中有用的东西,例如 Socket 实例?

我的托管服务将 mod_fastcgi 用于 Apache httpd。他们不允许我配置一个外部服务器,我提供一个主机:端口以通过 FastCgiExternalServer 将请求转发到。

4

2 回答 2

1

你想要什么Socket?套接字中唯一有用的方法是getInputStreamgetOutputStream,但如果您作为 CGI 运行,您已经拥有这些方法:它们被称为System.inSystem.out。:)

于 2009-08-07T08:25:06.180 回答
1

你不能合法地这样做。然而,你可以做一个这样的黑客(不要在家里尝试这个)。您可以读取is和写入os.

    Class<FileDescriptor> clazz = FileDescriptor.class;

    Constructor<FileDescriptor> c;
    try {
        c = clazz.getDeclaredConstructor(new Class[] { Integer.TYPE });
    } catch (SecurityException e) {
        e.printStackTrace();
        return;
    } catch (NoSuchMethodException e) {
        e.printStackTrace();
        return;
    }

    c.setAccessible(true);
    FileDescriptor fd;
    try {
        fd = c.newInstance(new Integer(socket));
    } catch (IllegalArgumentException e) {
        e.printStackTrace();
        return;
    } catch (InstantiationException e) {
        e.printStackTrace();
        return;
    } catch (IllegalAccessException e) {
        e.printStackTrace();
        return;
    } catch (InvocationTargetException e) {
        e.printStackTrace();
        return;
    }

    FileOutputStream os = new FileOutputStream(fd);
            FileInputStream is = new FileInputStream(fd);
于 2009-08-07T12:30:23.267 回答