aboutsummaryrefslogtreecommitdiffstats
path: root/lib/socket.go
diff options
context:
space:
mode:
authorMoritz Poldrack <git@moritz.sh>2022-09-13 13:50:35 +0200
committerRobin Jarry <robin@jarry.cc>2022-09-14 00:03:01 +0200
commit37c1db2ab22b892cc41c8d663a359fc6ebe12e31 (patch)
treecd418d7f861d68238361d532b0d0942271772fd1 /lib/socket.go
parentc947811e9f7a3421212287cbe9fce125aa059467 (diff)
downloadaerc-37c1db2ab22b892cc41c8d663a359fc6ebe12e31.tar.gz
socket: use existing socket if it is connected
When using ephemeral aerc sessions – for example while writing patches for it – the mailto: functionality breaks if the socket is removed. Try to send a ping (an empty message) to the socket and remove it, if the send fails or no noop reply is received. Signed-off-by: Moritz Poldrack <git@moritz.sh> Acked-by: Tim Culverhouse <tim@timculverhouse.com>
Diffstat (limited to 'lib/socket.go')
-rw-r--r--lib/socket.go6
1 files changed, 4 insertions, 2 deletions
diff --git a/lib/socket.go b/lib/socket.go
index c83cc8a9..4da3485b 100644
--- a/lib/socket.go
+++ b/lib/socket.go
@@ -24,8 +24,10 @@ type AercServer struct {
func StartServer() (*AercServer, error) {
sockpath := path.Join(xdg.RuntimeDir(), "aerc.sock")
- // remove the socket if it already exists
- os.Remove(sockpath)
+ // remove the socket if it is not connected to a session
+ if err := ConnectAndExec(""); err != nil {
+ os.Remove(sockpath)
+ }
logging.Infof("Starting Unix server: %s", sockpath)
l, err := net.Listen("unix", sockpath)
if err != nil {