私は単純なポートアプリケーション(文字通りErlang -- Ports documentationの例)とその使用を制御するGenServerを持っています。予期しないプロセスに戻るポートメッセージ
GenServerはCアプリケーションと通信することはできますが、iexまたはそのスーパーバイザは応答を受信しません。私がflush
をiexから呼び出すと、予想されるメッセージが表示されます。
別のモジュールを作成してそれから受信ループを起動すると、それでもポート応答メッセージは受信されません。
私はポートを間違って開いていると感じましたが、それを証明することはできません。私が悩んでいることは明らかですか?
port = Port.open({:spawn, "./extprg"}, [{:packet, 2}, :exit_status])
collect = fun() -> collect_results(port) end
spawn(collect)
def collect_results(port) do
receive do
{^port, {:data, data}} ->
#never gets called despite matching messages in flush
{^port, {:exit_status, status}} ->
#never gets called...
{:increment, value} ->
Port.command(port, [1, value])
collect_results(port)
end
end