Gen:tcp socket maximum number of bytes/characters possible to receive

defmodule TaskyRabbit.Socket do
  use GenServer


  defmodule State do
     defstruct port: nil, lsock: nil, socket: nil
  end
  #######
  # API #
  #######

  def start_link(port) do
    GenServer.start_link(__MODULE__, port, name: __MODULE__)
  end

  def init(port) do
    IO.puts(port)
    current = self()

    # tcp_options = [:binaries, {:packet, 0}, {:active, false}, {:reuseaddr, true}]
    # tcp_options = [:binary, packet: 0, active: false, reuseaddr: true]
    {:ok, l_socket} = :gen_tcp.listen(port, [:binary, {:packet, 4}, {:packet, :line}, active: false, reuseaddr: true])
    send(current, :accept)
    {:ok, %State{port: port, socket: l_socket}}
  end



  def handle_info(:accept, state = %{socket: socket}) do
    do_listen(socket)
    {:noreply, state}
  end


  defp do_listen(l_socket) do
    {:ok, socket} = :gen_tcp.accept(l_socket)

    spawn(fn() -> do_server(socket) end)

    do_listen(l_socket)
  end


  defp do_server(socket, string \\ "") do
    case :gen_tcp.recv(socket, 0) do
      { :ok, data } ->

        case message = Poison.Parser.parse(data) do
          {:ok, json} ->
            IO.puts "good"
          {:error, :invalid, t} ->
            new_string = "#{string}#{data}" 
            do_server(socket, data)
          {:error, {:invalid, t, _}} ->
            do_server(socket, data)
        end
        IO.inspect (data), label: "received"
        # TaskyRabbit.tcp_rbmq(data)
      { :error, :closed } ->
        IO.inspect "closed"
        :ok
    end
  end
end