Я пытаюсь реализовать CLI с двумя командами:
run
, который порождает сокет unix в /my/path/file.sock
и производит выводwatch
который подключается к сокету и перенаправляет вывод на свой собственный выводКогда я убиваю команду watch
, я не могу понять, почему команда run
тоже уничтожается. Они не вызывают никаких исключений или системных сигналов. Я заметил, что проблемы возникают из-за функции flush
. После вызова он действует как exit 0
. Почему?
Вот исходники: https://github.com/soywod/comodoro
Сервер должен прослушивать отключение клиента и удалять соединение из списка подключений. Что-то вроде этого может сработать:
let client_thread conn =
let in_ch = in_channel_of_descr conn in
while true do
try input_line in_ch |> ignore
with End_of_file ->
(* Remove conn from !conn and close the conn *)
done
in
let add_conn () =
(* ... *)
Thread.create client_thread conn |> ignore;
(* ... *)
in
Действительно, я не хотел слушать входящий канал, потому что мне это не нужно, но на самом деле знать, когда клиент отключается, необходимо. Теперь работает как шарм, спасибо!