如何绕过插座?

时间:2011-01-22 09:43:27

标签: sockets

我安装了一个在端口81上运行的流媒体服务器“Lighttpd”(light-tpd)。

我有一个C程序,它使用socket api创建的服务器套接字来侦听端口80上的http请求。

我希望一旦我从客户端收到端口80上的请求,我就将其转发到流媒体服务器,剩余的会话将在流媒体服务器和客户端&他们完全绕过我的C程序。

问题是客户端期望来自端口80的套接字的msgs(即来自我的C程序的套接字),因为它仅向端口80发送请求而不是从端口81上提供服务的流服务器发送请求。 任何人都可以帮助我解决绕过端口80上的套接字回复客户端的问题。

解决方案我认为:我的程序可以是一个中间人......它会将请求转发到流媒体服务器的端口81,当它从那里得到回复时,它会将它们转发给客户端......但绕过它会很有效率我不知道该怎么做。请帮帮我。

提前致谢

2 个答案:

答案 0 :(得分:1)

为什么要把你的C程序放在前面? Lighttpd旨在充当前端代理(以及其他用途),因此您可以将lighttpd放在前面并使用其mod_proxy_core将请求传递给您的C程序。在应用程序内部进行一些处理后,您可以使用X-Rewrite和/或X-Sendfile将请求传递回Lighttpd。

答案 1 :(得分:0)

我最近实现了一种类似的技术,其中单个程序接受TCP连接,然后将该连接“传递”到另一个组件,并且在套接字对话中不再发挥作用。它使用通过UNIX套接字将接受的套接字的文件描述符传递给服务器组件的技术,该服务器组件有效地执行fd的进程间dup()

请参阅herehere

这对我有用,因为我可以控制服务器端UNIX套接字的两端,但是为了你的工作,你需要:

  1. 调度组件和服务器组件之间的UNIX套接字。
  2. 完全控制服务器组件。
  3. 您可能需要查看lighttpd源代码...

    抱歉,这不是一个正确答案......