I know I am very late to the party and that this was answered a long time ago but I just encountered this searching for something else and I have an alternate proposal.
When you encounter the EADDRINUSE
return from bind()
you can enter an error checking routine that connects to the socket. If the connection succeeds, there is a running process that is at least alive enough to have done the accept()
. This strikes me as being the simplest and most portable way of achieving what you want to achieve. It has drawbacks in that the server that created the UDS in the first place may actually still be running but “stuck” somehow and unable to do an accept()
, so this solution certainly isn’t fool-proof, but it is a step in the right direction I think.
If the connect()
fails then go ahead and unlink()
the endpoint and try the bind()
again.