Допустим есть gen_server, который при старте запускает порт, написаный на С. handle_call обычно шлёт порту запрос и ждёт ответ. Когда приходит ответ - отвечает клиенту.
Порт написан таким образом, что при запуске делает read(0, ... и ждёт команд.
Я обратил внимание, что если убивать ерланговский сервер, то read() в порте возврящает ноль. Я сделал так, что порт при этом тоже останавливается, предполагая, что дескриптор закрыли с другой стороны.
Проблема в том, что если сервер запускать через параметры командной строки при старте (erl -run), то read() в порте возврящает ноль ещё при старте и порт завершает работу.
Это баг или фича? Я правильно понимаю, что в вм чего-то там не успевает проинициализироваться? Как с этим бороться? Версия вм r13b03, как в последней не знаю, пока не обновлял. Исходники вм пока не смотрел.
Спасибо.
cast r а то он вроде ерлангист, а на тег не подписан.
Да, ещё обратил внимание, что это не всегда так. В некоторых случает работает как и ожидалось. Никаких нулей в порт не приходит.