<div dir="ltr">What is your zlib version? There has been a thread about a very similar issue and it was pinpointed to be related to the zlib version in your system: <a href="http://erlang.org/pipermail/erlang-questions/2017-January/091434.html">http://erlang.org/pipermail/erlang-questions/2017-January/091434.html</a></div><div class="gmail_extra"><br clear="all"><div><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div><br></div><div><br></div><div><span style="font-size:13px"><div><span style="font-family:arial,sans-serif;font-size:13px;border-collapse:collapse"><b>José Valim</b></span></div><div><span style="font-family:arial,sans-serif;font-size:13px;border-collapse:collapse"><div><span style="font-family:verdana,sans-serif;font-size:x-small"><a href="http://www.plataformatec.com.br/" style="color:rgb(42,93,176)" target="_blank">www.plataformatec.com.br</a></span></div><div><span style="font-family:verdana,sans-serif;font-size:x-small">Skype: jv.ptec</span></div><div><span style="font-family:verdana,sans-serif;font-size:x-small">Founder and Director of R&D</span></div></span></div></span></div></div></div></div></div>
<br><div class="gmail_quote">On Sat, Jan 28, 2017 at 1:55 AM, Kevin Johnson <span dir="ltr"><<a href="mailto:johnson786.kevin@gmail.com" target="_blank">johnson786.kevin@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi,<div><br></div><div>I am using Elixir to send data using :gen_tcp. The syntax presented here may be elementary Elixir syntax, however the issue is specifically related to the usage of term_to_binary and binary_to_term conversions over gen_tcp.<br></div><div><br></div><div>This is the command I used on the client side:</div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">:gen_tcp.send(client_socket, :erlang.term_to_binary(data))</blockquote><div><br></div><div>This is the command I use on the server side:</div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">  defp handle_data(data) do<br>    data<br>    |> :erlang.binary_to_term<br>  end</blockquote><div> </div><div>When my data gets received on the server side, it seems that at a certain size threshold that it errors out like this:</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">pry(6)> [error] GenServer #PID<0.502.0> terminating</blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">** (ArgumentError) argument error </blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"> :erlang.binary_to_term(<<131, 116, 0, 0, 0, 28, 109, 0, 0, 0, 5, 66, 49, 95, 81, 49, 108, 0, 0, 0, 1, 116, 0, 0, 0, 1, 109, 0, 0, 0, 4, 116, 101, 120, 116, 109, 0, 0, 0, 11, 84, 69, 88, 84, 32, 65, 78, 83, 87, 69, ...>>)</blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">(stdlib) gen_server.erl:601: :gen_server.try_dispatch/4</blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">(stdlib) gen_server.erl:667: :gen_server.handle_msg/5</blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">(stdlib) proc_lib.erl:247: :proc_lib.init_p_do_apply/3</blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Last message: {:tcp, #Port<0.10115>, <<131, 116, 0, 0, 0, 28, 109, 0, 0, 0, 5, 66, 49, 95, 81, 49, 108, 0, 0, 0, 1, 116, 0, 0, 0, 1, 109, 0, 0, 0, 4, 116, 101, 120, 116, 109, 0, 0, 0, 11, 84, 69, 88, 84, 32, 65, 78, 83, ...>>} </blockquote><div><br></div><div>Here is some example data that will just pass fine:</div><div>%{"B2_Q18" => [%{"choice_id" => "B2_Q18_C1"}], "B3_B9_Q1" => [%{"choice_id" => "B3_B9_Q1_C1"}], "B2_Q7" => [%{"choice_id" => "B2_Q7_C1"}], "B5_B1_Q8" => [%{"choice_id" => "B5_B1_Q8_C1"}], "B3_B6_Q1" => [%{"choice_id" => "B3_B6_Q1_C1"}], "B5_B2_Q5" => [%{"choice_id" => "B5_B2_Q5_C1"}, %{"choice_id" => "B5_B2_Q5_C2"}], "B3_B7_Q1" => [%{"choice_id" => "B3_B7_Q1_C1"}], "B3_B4_Q1" => [%{"choice_id" => "B3_B4_Q1_C1"}], "B2_Q16" => [%{"choice_id" => "B2_Q16_C1"}], "B2_Q20" => [%{"choice_id" => "B2_Q20_C1"}], "B2_Q5" => [%{"choice_id" => "B2_Q5_C1"}], "B2_Q9" => [%{"choice_id" => "B2_Q9_C1"}], "B2_Q17" => [%{"choice_id" => "B2_Q17_C1"}], "B3_B2_Q1" => [%{"choice_id" => "B3_B2_Q1_C1"}], "B5_B2_Q3" => [%{"choice_id" => "B5_B2_Q3_C1"}], "B3_B3_Q1" => [%{"choice_id" => "B3_B3_Q1_C1"}], "B5_B1_Q1" => [%{"text" => "TEXT ANSWER"}], "B2_Q14" => [%{"choice_id" => "B2_Q14_C1"}], "B5_B1_Q3" => [%{"choice_id" => "B5_B1_Q3_C22"}], "B5_B2_Q2" => [%{"choice_id" => "B5_B2_Q2_C1"}], "B2_Q4" => [%{"choice_id" => "B2_Q4_C1"}], "B2_Q10" => [%{"choice_id" => "B2_Q10_C1"}], "B4_Q1" => [%{"choice_id" => "B4_Q1_C1"}, %{"choice_id" => "B4_Q1_C10"}], "B5_B1_Q6" => [%{"choice_id" => "B5_B1_Q6_C1"}], "B2_Q6" => [%{"choice_id" => "B2_Q6_C1"}], "B2_Q2" => [%{"choice_id" => "B2_Q2_C1"}], "B2_Q1" => [%{"choice_id" => "B2_Q1_C1"}]}<br></div><div><br></div><div>The moment I make it slightly longer, by like appending an extra key "a" => "b" it will give me the above error.</div><div><br></div><div>It seems to be that the size of the keys plays an issue here, because if I convert all the above "choice_id" keys to a mere "c", then even with the extra entry "a" => "b" included like following below will work just fine:</div><div>%{"B2_Q18" => [%{"c" => "B2_Q18_C1"}], "B3_B9_Q1" => [%{"c" => "B3_B9_Q1_C1"}], "B2_Q7" => [%{"c" => "B2_Q7_C1"}], "B5_B1_Q8" => [%{"c" => "B5_B1_Q8_C1"}], "B3_B6_Q1" => [%{"c" => "B3_B6_Q1_C1"}], "B5_B2_Q5" => [%{"c" => "B5_B2_Q5_C1"}, %{"c" => "B5_B2_Q5_C2"}], "B3_B7_Q1" => [%{"c" => "B3_B7_Q1_C1"}], "B3_B4_Q1" => [%{"c" => "B3_B4_Q1_C1"}], "B2_Q16" => [%{"c" => "B2_Q16_C1"}], "B2_Q20" => [%{"c" => "B2_Q20_C1"}], "B2_Q5" => [%{"c" => "B2_Q5_C1"}], "B2_Q9" => [%{"c" => "B2_Q9_C1"}], "B2_Q17" => [%{"c" => "B2_Q17_C1"}], "B3_B2_Q1" => [%{"c" => "B3_B2_Q1_C1"}], "B5_B2_Q3" => [%{"c" => "B5_B2_Q3_C1"}], "B3_B3_Q1" => [%{"c" => "B3_B3_Q1_C1"}], "B5_B1_Q1" => [%{"text" => "TEXT ANSWER"}], "B2_Q14" => [%{"c" => "B2_Q14_C1"}], "B5_B1_Q3" => [%{"c" => "B5_B1_Q3_C22"}], "B5_B2_Q2" => [%{"c" => "B5_B2_Q2_C1"}], "B2_Q4" => [%{"c" => "B2_Q4_C1"}], "B2_Q10" => [%{"c" => "B2_Q10_C1"}], "B4_Q1" => [%{"c" => "B4_Q1_C1"}, %{"c" => "B4_Q1_C10"}], "B5_B1_Q6" => [%{"c" => "B5_B1_Q6_C1"}], "B2_Q6" => [%{"c" => "B2_Q6_C1"}], "B2_Q2" => [%{"c" => "B2_Q2_C1"}], "B2_Q1" => [%{"c" => "B2_Q1_C1"}], "a" => "b"}<br></div><div><br></div><div>The following on the other hand will just fail:</div><div>data = %{"<wbr>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<wbr>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<wbr>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<wbr>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<wbr>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<wbr>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<wbr>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<wbr>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<wbr>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<wbr>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<wbr>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<wbr>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<wbr>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<wbr>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<wbr>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<wbr>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<wbr>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<wbr>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<wbr>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<wbr>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<wbr>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<wbr>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<wbr>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<wbr>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<wbr>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<wbr>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<wbr>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<wbr>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<wbr>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<wbr>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<wbr>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<wbr>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<wbr>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<wbr>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<wbr>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<wbr>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<wbr>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<wbr>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<wbr>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<wbr>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<wbr>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<wbr>aaaaaaaaaaaaaaaaaaaa" => "q", "<wbr>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb<wbr>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb<wbr>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb<wbr>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb<wbr>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb<wbr>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb<wbr>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb<wbr>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb<wbr>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb<wbr>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb<wbr>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb<wbr>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb<wbr>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb<wbr>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb<wbr>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb<wbr>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb<wbr>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb<wbr>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb<wbr>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb<wbr>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb<wbr>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb<wbr>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb<wbr>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb<wbr>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb<wbr>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb<wbr>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb<wbr>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb<wbr>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb<wbr>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb<wbr>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb<wbr>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb<wbr>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb<wbr>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb<wbr>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb<wbr>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb<wbr>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb<wbr>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb<wbr>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb<wbr>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb<wbr>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb<wbr>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb<wbr>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb<wbr>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb<wbr>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb<wbr>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb<wbr>bbbbbbbbbbbbbbbbbbbbbbbbbbbbb" => "q", "<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>cccccccccccccccccccccccccccccc<wbr>ccccccccccccccc" => "q"}<br></div><div>:gen_tcp.send(client_socket, :erlang.term_to_binary(data))</div><div><br></div><div>The only issue that I was able to track down here is a conjunction of two things:</div><div>1) A limit to the size of total key length inside a map/hash</div><div>2) sending that hash as a binary over tcp and converting back to term</div><div><br></div><div>In all of the above cases, a direct conversion of :erlang.term_to_binary followed by :erlang.binary_to_term works just fine without any issues. The issue only comes about after that binary was send over tcp and then :erlang.binary_to_term is attempted.</div><div><br></div><div>I would greatly appreciate if anyone can provide me guidance in this matter, point out to me any relevant documentation that officially states any of these constraints if they are in fact constraints, and if they are not supposed to be constraints then kindly instruct me what additional information may be needed for me to get to the bottom of this.</div><div><br></div><div>Thank you.</div></div>
<br>______________________________<wbr>_________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" rel="noreferrer" target="_blank">http://erlang.org/mailman/<wbr>listinfo/erlang-questions</a><br>
<br></blockquote></div><br></div>