[erlang-questions] how to use sockets in erlang

Ivan Uemlianin ivan@REDACTED
Fri Jun 17 13:10:12 CEST 2011

Dear All

I have a Python application I'm porting to Erlang (I'm expecting the 
Erlang version to be a bit faster, but much more robust and easier to 
scale up).  The central function is to jsonify some data, send it over a 
socket to a remote (third party) server, and receive a reply.

Thanks to mochijson2, the jsonifying is sorted, but something in the 
socketing is not going well.

In the excerpts below I abstract the socket connect/send/receive code. 
The python works as expected, the erlang gen_tcp:recv returns {error, 
closed}.  I suspect I am missing something basic about sockets in 
Erlang.  Please can someone point out what it is?

n.b. jsondata (python) and JsonData (erlang) are identical --- I have 
even copied the list of integers in JsonData and pasted them into the 
python and sent them.

Python version --- works:

     jsondata = json.dumps(data) + "\n"
     s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     s.connect((appliance_host, appliance_port))
     returndata = s.recv(4096)

Erlang version --- doesn't work:

     JsonData = list_to_binary(mochijson2:encode(Data) ++ <<10>>),
     {ok, Socket} = gen_tcp:connect(?APPLIANCE_HOST, ?APPLIANCE_PORT,
				   {active, false},
				   {packet, 0}]),
     ok = gen_tcp:send(Socket, JsonData),
     Result = gen_tcp:recv(Socket, 4096, 5000),
     % Result = {error, closed}

With thanks and best wishes


Ivan A. Uemlianin
Speech Technology Research and Development


     "Froh, froh! Wie seine Sonnen, seine Sonnen fliegen"
                      (Schiller, Beethoven)

More information about the erlang-questions mailing list