Skip to content

RPC clients connecting to an abandoned socket should fail gracefully #15676

Description

@Alizter

Description

If a watch server is hard killed then the _build/.rpc/dune socket is orphaned. Subsequent clients fail badly when the connection is rightly refused:

$ dune monitor
Error: failed to connect to RPC server unix:path=_build/.rpc/dune
Unix.Unix_error(Unix.ECONNREFUSED, "connect", "")
backtrace:
Raised by primitive operation at Rpc__Csexp_rpc.Client.connect in file
"rpc__Csexp_rpc.ml", line 577, characters 20-45
Called from Fiber__Scheduler.exec in file "fiber__Scheduler.ml", line 77,
characters 8-11
Called from Fiber__Scheduler.start in file "fiber__Scheduler.ml", line 219,
characters 2-42
Called from Fiber.run.(fun) in file "fiber.ml" (inlined), line 21, characters
28-47
Called from Dune_scheduler__Scheduler.Run_once.run in file
"dune_scheduler__Scheduler.ml", line 492, characters 10-50
Called from Dune_scheduler__Scheduler.Run_once.run_and_cleanup in file
"dune_scheduler__Scheduler.ml", line 502, characters 14-21
Called from Dune_scheduler__Scheduler.Run.go in file
"dune_scheduler__Scheduler.ml", line 585, characters 12-42
Called from Cmdliner_term.app.(fun) in file "cmdliner_term.ml", line 22,
characters 19-24
Called from Cmdliner_eval.run_parser in file "cmdliner_eval.ml", line 41,
characters 7-16
Called from Cmdliner_eval.eval_value in file "cmdliner_eval.ml", line 256,
characters 15-47

Reproduction case

#15675

Metadata

Metadata

Assignees

No one assigned

    Labels

    rpcDune's RPC server and client support

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions