开发者

How to bypass socket?

开发者 https://www.devze.com 2023-02-06 16:44 出处:网络
I have installed a streaming server \"Lighttpd\" (light-tpd) which runs on port 81. I have a C program that listens to http requests on port 80 using a server socket created by socket api.

I have installed a streaming server "Lighttpd" (light-tpd) which runs on port 81.

I have a C program that listens to http requests on port 80 using a server socket created by socket api.

I want that as soon as I get a request on the port 80 from a client I forward that to the streaming server and the remaining conversation 开发者_如何转开发takes place b/w the Streaming Server and client & they bypass my C program completely.

The problem is client would be expecting msgs from socket at port 80 (i.e from the socket of my C program) since it had sent request to port 80 only rather than from the Streaming server which gives service on port 81. can anyone help me out on this issue of bypassing the socket on port 80 for replying to the client.

Solution I think: my program can be a middle man...It will forward the request to port 81 of streaming server and when it get replies from there it forwards them to the client...but bypassing would be efficient and I don't know how to do that. Please help me out.

Thanks in advance


Why put your C program in front? Lighttpd is designed to act as a frontend proxy (among other uses), so you can put lighttpd in front and use its mod_proxy_core to pass requests to your C program. You can use X-Rewrite and/or X-Sendfile to pass requests back to Lighttpd after doing some processing inside your application.


I have recently implemented a similar technique where a single program accepts a TCP connection and then 'passes' that connection to another component and plays no further part in the socket conversation. It uses the technique of passing the file descriptor of the accepted socket over a UNIX socket to the server component which effectively does an inter-process dup() of the fd.

See here and here.

This works for me as I have control of both ends of the UNIX socket on the server-side, but to work for you, you'd need:

  1. A UNIX socket between your dispatching component and server components.
  2. Full control of the server component.

You might need to hack away at the lighttpd source code...

Sorry, not really an proper answer...

0

精彩评论

暂无评论...
验证码 换一张
取 消