我可以从一个文件描述符号获得Java Socket技术? [英] Can I get a Java Socket from a file descriptor number?

查看:415
本文介绍了我可以从一个文件描述符号获得Java Socket技术?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当一个程序通过FastCGI的开始,它与exec'd已经打开交谈到Web服务器的套接字。套接字的文件描述符号码交给程序,但怎么可能被转换成的东西在Java中,有用的,如Socket实例?

When a program is started via FastCGI, it is exec'd with a socket already open to talk to the web server. The socket's file descriptor number is handed to the program, but how can that be converted to something useful in Java, such as a Socket instance?

我的主机服务使用的mod_fastcgi的Apache httpd的。他们不会让我配置外部服务器在那里我提供主机:端口,通过FastCgiExternalServer将请求转发到

My hosting service uses mod_fastcgi for Apache httpd. They won't allow me to configure an external server where I provide a host:port to forward requests to via FastCgiExternalServer.

推荐答案

您不能这样做合法。然而,你可以这样做一个黑客(不要在家里尝试这个)。您可以从读的是和写入操作系统

You can't do this legally. However, you can do a hack like this (Don't try this at home). You can read from is and write to 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);

这篇关于我可以从一个文件描述符号获得Java Socket技术?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆