open_port() on FD 0,1 problems

Daniel Goertzen daniel.goertzen@REDACTED
Tue Aug 10 15:39:43 CEST 2010


I am trying to operate an Erlang Port for stdin and stdout
[open_port({fd,0,1}...].  The program below is to receive two integers,
multiply them, and write the result. Every other request vanishes without a
reply, and I don't know why.  Details:

- Windows 7 64 bit.
- Erlang launched with "-noshell -s erlang_rpc_benchmark"
- I have to wait a moment after launching erlang before sending it data, or
I definitely get dataloss.
- Exactly every other packet gets lost, starting with the first one.
- The byte counters on Task Manager show that the request is getting to
erl.exe, but not to my code.
- I've added debug code to verify that there are no other messages appearing
at my receive expression (not currently in code below).
- I wrote a Python version of this program, and it worked without issue.


Background:  I plan to write a Python GUI program with an Erlang child
process.  The test program below is to assess Python->Erlang messaging
performance.  I am open to other IPC approaches if there is something
better.

Thanks,
Dan.


-module(erlang_rpc_benchmark).
-export([start/0, std_server/0]).

start() ->
  spawn(fun std_server/0).

std_server() ->
  Port = open_port( {fd,0,1}, [{packet, 4}, binary ] ),
  loop(Port).

loop(Port) ->
  receive
    {Port, { data, <<A:32,B:32>> }} ->
      Result = A*B,
      Port ! {self(), {command, <<Result:32>>}};
  end,
  loop(Port).


More information about the erlang-questions mailing list