Assume a legacy Linux application listening on a UNIX domain socket /tmp/foo
.
In addition to communicating with this legacy application over the UNIX domain socket mechanism I want to be able to connect to it via a TCP-connection on port say 1234.
What is the easiest way to bind to TCP port 1234 and then redirect all incoming connections to the UNIX domain socket /tmp/foo
?
Easiest? Probably Netcat (aka
nc
):The first command listens on port 1234 for incoming connections, and pipes the resulting data to the second command. The second connects to the Unix domain socket
/tmp/foo
, and writes its input to that socket. Note that this will only accept a single connection, and exit as soon as that connection is dropped. If you want to keep listening for more connections, use the-k
option:You can test that this is working by setting up a listener for that socket in one terminal:
And writing to it in another:
socat, as recommended by knorv, is more capable, but more complicated to use.
You should be able to bind to TCP 1234, get a socket fd for /tmp/foo and use the select call to 'listen' for data on both 1234, and /tmp/foo. Any data written to 1234, you rewrite to /tmp/foo and vice-versa.
You now act as a proxy and transfer data back and forth.
And here is a web-page which might help: http://osr507doc.sco.com/en/netguide/dusockC.io_multiplexing.html
Not tried it : but it looks like 'lighttpd' can do this for you:
http://redmine.lighttpd.net/wiki/lighttpd/Docs:ModProxyCore
In additons to @knorv's answer: with
xinetd
it can work like a daemonTurns out socat can be used to achieve this:
And with a bit of added security:
These examples have been tested and work as expected.