[erlang-questions] Using select in a Port
jm
jeffm@REDACTED
Fri Oct 26 07:28:50 CEST 2007
Per Hedeland wrote:
> I can however be wrong from your process' point of view - e.g. if it
> expects to receive binaries in Erlang external term format, and
> optimistically does a binary_to_term/1 on whatever it gets, it will die
> with a badarg if your port program sends garbage - and the port will be
> closed *as a result of your process dying*. At least during debugging
> you may want to wrap catch and/or try around such things. And at least
> when running from the shell, you should get a message about the
> immediate cause of any "unnatural" death:
>
> =ERROR REPORT==== 25-Oct-2007::22:30:11 ===
> Error in process <0.52.0> with exit value: {badarg,[{erlang,binary_to_term,[<<3 bytes>>]},{ll,loop,1}]}
>
>
> --Per
I put a simple try/catch around the loop/1 as you suggested
try loop(Port)
catch
T:Err -> io:format("~n**** catch : ~p:~p~n",
[T, Err])
end
This did it. It spat out the error. A very dumb error, which when
corrected rectified the problem. Given the amount of code I would have
thought the error lay else where. I'd looked at that particular line of
code a number of times and didn't see anything. Just goes to show.
Anyway, I've added abit more code, fix a couple of other bugs, and
removed all those fprintf() statements. The next chance I'll get to work
on this after today won't be for another week or two at which time I'm
hoping to be able to make an initial release.
Jeff.
More information about the erlang-questions
mailing list