Skip to content

Instantly share code, notes, and snippets.

@miaout17
Created September 15, 2008 14:37
Show Gist options
  • Save miaout17/10871 to your computer and use it in GitHub Desktop.
Save miaout17/10871 to your computer and use it in GitHub Desktop.
-module(tcp_bridge).
-export([start/3]).
start(IP, Port, LocalPort) ->
{ok, ListenSocket} = gen_tcp:listen( LocalPort, [list, inet, {packet, raw}] ),
spawn( fun() -> listen_loop(ListenSocket, IP, Port) end ).
listen_loop(ListenSocket, IP, Port) ->
{ok, LocalSocket} = gen_tcp:accept(ListenSocket),
{ok, RemoteSocket} = gen_tcp:connect(IP, Port, [list, inet, {packet, raw}], 3000),
bridge(LocalSocket, RemoteSocket),
bridge(RemoteSocket, LocalSocket),
listen_loop(ListenSocket, IP, Port).
bridge(RecvSocket, SendSocket) ->
Receiver = spawn(fun() -> reciever(RecvSocket, SendSocket) end),
gen_tcp:controlling_process(RecvSocket, Receiver),
Receiver.
reciever(RecvSocket, SendSocket) ->
receive
{tcp, _Socket, Data} ->
gen_tcp:send(SendSocket, Data),
reciever(RecvSocket, SendSocket);
{tcp_closed, _Socket} ->
gen_tcp:close(SendSocket);
die ->
gen_tcp:close(SendSocket);
_ ->
void
end.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment