Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- run_proxy(Port) ->
- tcp_server:start_raw_server(Port, fun(S) -> ?MODULE:start_proxy(Port, S) end, 100, 0),
- ok.
- start_proxy(Port, Socket) ->
- {ok, SrvSocket} = gen_tcp:connect("172.28.1.90", Port-0000, [binary, {packet, 0}, {active, true}, {buffer, 1024*1024}, {delay_send, false}, {deliver, term}, {keepalive, true}, {mode, binary}, {nodelay, true}]),
- io:format("New connection on port ~p~n", [Port]),
- run_proxy(Socket, SrvSocket).
- run_proxy(S1, S2) ->
- receive
- {tcp_closed, _} -> ok;
- {tcp_error, _, _Reason} -> ok;
- {tcp,S1,Data} ->
- gen_tcp:send(S2, Data),
- {message_queue_len, MQL} = erlang:process_info(self(), message_queue_len),
- if MQL > 100 ->
- io:format("Message queue overloaded ~p!~n", [MQL]),
- run_proxy2(S1, S2);
- true -> run_proxy(S1, S2)
- end;
- {tcp,S2,Data} ->
- gen_tcp:send(S1, Data),
- {message_queue_len, MQL} = erlang:process_info(self(), message_queue_len),
- if MQL > 100 ->
- io:format("Message queue overloaded ~p!~n", [MQL]),
- run_proxy2(S1, S2);
- true -> run_proxy(S1, S2)
- end;
- _Unk -> io:format("Unknown message ~p~n", [_Unk]), run_proxy(S1, S2)
- end.
- run_proxy2(S1, S2) ->
- receive
- {tcp_closed, _} -> ok;
- {tcp_error, _, _Reason} -> ok;
- {tcp,S1,Data} ->
- gen_tcp:send(S2, Data),
- {message_queue_len, MQL} = erlang:process_info(self(), message_queue_len),
- if MQL < 100 ->
- io:format("Message queue fine!~n"),
- run_proxy(S1, S2);
- true -> run_proxy2(S1, S2)
- end;
- {tcp,S2,Data} ->
- gen_tcp:send(S1, Data),
- {message_queue_len, MQL} = erlang:process_info(self(), message_queue_len),
- if MQL < 100 ->
- io:format("Message queue fine!~n"),
- run_proxy(S1, S2);
- true -> run_proxy2(S1, S2)
- end;
- _Unk -> io:format("Unknown message ~p~n", [_Unk]), run_proxy(S1, S2)
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement