シンプルなシンプルな TCP エコーサーバ

同時接続は 500 セッションまで。監視等はしていませんが、簡単にできると思います。
とにかく初めての人にもわかりやすく効率よく簡単に掛けるエコーサーバを書いてみています。
これに supervisor 付けると凄くわかりやすいかも。

-module(server).

-compile(export_all).

-import(lists).
-import(gen_tcp).
-import(inet).

-define(kOptListen, [{active, false}, binary, {packet, 2}]).
-define(kMaxAcceptors, 500).
-define(kListenPort, 5000).

start() ->
  case gen_tcp:listen(?kListenPort, ?kOptListen) of
    {ok, ListenSocket} ->
      lists:foreach(
        fun(_) ->
          spawn(fun() -> acceptor(ListenSocket) end)
        end,
        lists:duplicate(?kMaxAcceptors, dummy));
    {error, _Reason} ->
      error
  end.

acceptor(ListenSocket) ->
  case gen_tcp:accept(ListenSocket) of
    {ok, Socket} ->
      io:format("successfully accepted at ~p\n", [self()]),
      connect(Socket),
      acceptor(ListenSocket);
    {error, _Reason} ->
      acceptor(ListenSocket)
  end.

connect(Socket) ->
  inet:setopts(Socket, [{active, once}]),
  receive
    {tcp, Socket, Packet} ->
      io:format("successfully received: ~p\n", [Packet]),
      gen_tcp:send(Socket, Packet),
      connect(Socket);
    {tcp_closed, Socket} ->
      io:format("tcp_closed: ~p\n", [self()]),
      ok = gen_tcp:close(Socket);
    {tcp_error, Socket, _Reason} ->
      io:format("tcp_error: ~p\n", [self()]),
      ok = gen_tcp:close(Socket)
  end.

追記

はてブで突っ込まれていたので、import した理由は単に明示的に書きたいなぁと思っているからであまり理由はありません ... RabbitMQ も import していたので:^P