Advertisement
datacompboy

Untitled

Mar 1st, 2014
203
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Erlang 2.03 KB | None | 0 0
  1. run_proxy(Port) ->
  2.     tcp_server:start_raw_server(Port, fun(S) -> ?MODULE:start_proxy(Port, S) end, 100, 0),
  3.     ok.
  4.  
  5. start_proxy(Port, Socket) ->
  6.     {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}]),
  7.     io:format("New connection on port ~p~n", [Port]),
  8.     run_proxy(Socket, SrvSocket).
  9.  
  10. run_proxy(S1, S2) ->
  11.   receive
  12.     {tcp_closed, _} -> ok;
  13.     {tcp_error, _, _Reason} -> ok;
  14.     {tcp,S1,Data} ->
  15.         gen_tcp:send(S2, Data),
  16.         {message_queue_len, MQL} = erlang:process_info(self(), message_queue_len),
  17.         if MQL > 100 ->
  18.                 io:format("Message queue overloaded ~p!~n", [MQL]),
  19.                 run_proxy2(S1, S2);
  20.            true -> run_proxy(S1, S2)
  21.         end;
  22.     {tcp,S2,Data} ->
  23.         gen_tcp:send(S1, Data),
  24.         {message_queue_len, MQL} = erlang:process_info(self(), message_queue_len),
  25.         if MQL > 100 ->
  26.                 io:format("Message queue overloaded ~p!~n", [MQL]),
  27.                 run_proxy2(S1, S2);
  28.            true -> run_proxy(S1, S2)
  29.         end;
  30.     _Unk -> io:format("Unknown message ~p~n", [_Unk]), run_proxy(S1, S2)
  31.   end.
  32.  
  33. run_proxy2(S1, S2) ->
  34.   receive
  35.     {tcp_closed, _} -> ok;
  36.     {tcp_error, _, _Reason} -> ok;
  37.     {tcp,S1,Data} ->
  38.         gen_tcp:send(S2, Data),
  39.         {message_queue_len, MQL} = erlang:process_info(self(), message_queue_len),
  40.         if MQL < 100 ->
  41.                 io:format("Message queue fine!~n"),
  42.                 run_proxy(S1, S2);
  43.            true -> run_proxy2(S1, S2)
  44.         end;
  45.     {tcp,S2,Data} ->
  46.         gen_tcp:send(S1, Data),
  47.         {message_queue_len, MQL} = erlang:process_info(self(), message_queue_len),
  48.         if MQL < 100 ->
  49.                 io:format("Message queue fine!~n"),
  50.                 run_proxy(S1, S2);
  51.            true -> run_proxy2(S1, S2)
  52.         end;
  53.     _Unk -> io:format("Unknown message ~p~n", [_Unk]), run_proxy(S1, S2)
  54.   end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement