[erlang-questions] "Bad value on output port" when my erlang process communicates with a c-node
Richard Evans
richardprideauxevans@REDACTED
Wed Nov 2 11:35:05 CET 2011
Sorry, please ignore the question in my last message. I was making a
silly error...
On Wed, Nov 2, 2011 at 10:17 AM, Richard Evans
<richardprideauxevans@REDACTED> wrote:
> I have a problem which I don't understand. Very grateful for any info
> you guys have.
>
> My erlang server is communicating with a c-node, using the example
> code in Joe Armstrong's book.
>
> So for example, when the server is created:
>
> create() ->
> spawn(fun() ->
> process_flag(trap_exit, true),
> Port = open_port({spawn,
> "../ltp_server/Server/build/Debug/server"}, [{packet, 2}]),
> loop(self(), Port)
> end).
>
> Here is the main loop:
>
> loop(Server, Port) ->
> receive
> {call, Caller, Msg} ->
> Port ! {self(), {command, encode(Msg)}},
> receive
> {Port, {data, Data}} ->
> Caller ! {Server, decode(Data)}
> end,
> loop(Server, Port);
> stop ->
> Port ! {self(), close},
> receive
> {Port, closed} -> exit(normal)
> end;
> {'EXIT', Port, Reason} ->
> exit({port_terminated, Reason})
> end.
>
> The problem I have is that if the Msg I am sending to the c-node has
> certain special characters in it, I get "Bad value on output port".
>
> For example, this encoding line below generates the error:
>
> encode({perform_choice, C, Choice, Spin}) ->
> [?SERVER_INSTRUCTION_PERFORM_CHOICE, Spin | C] ++ ['#' | Choice]; %
> delimiting the two strings with '#'
>
> But if I delimit with '~" instead of '#', the problem goes away:
>
> encode({perform_choice, C, Choice, Spin}) ->
> [?SERVER_INSTRUCTION_PERFORM_CHOICE, Spin | C] ++ [~' | Choice]; %
> delimiting the two strings with '~'
>
> I *thought* you could send any ascii value 0-255 from erlang to c. So
> '#" would be just as legitimate as '~'. Can you guys shed any light on
> why I am seeing this problem?
>
> thanks in advance,
>
> Richard
>
More information about the erlang-questions
mailing list