我可以从文件描述符编号中获取Java套接字吗?

时间:2009-08-07 08:14:05

标签: java apache fastcgi mod-fastcgi

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

我的托管服务使用mod_fastcgi进行Apache httpd。他们不允许我配置一个外部服务器,我提供一个host:port来通过FastCgiExternalServer转发请求。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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);