From f5fa988fcfc83932e52ed3128abe1812276c88c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Romain=20Vimont=20=28=C2=AEom=29?= Date: Tue, 6 Nov 2012 21:02:35 +0100 Subject: [PATCH] Make overlay_mdp_client_socket_path local Unlink mdp sockets by asking the OS what the bound name was. --- mdp_client.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/mdp_client.c b/mdp_client.c index e02728f6..5cd2d9df 100644 --- a/mdp_client.c +++ b/mdp_client.c @@ -89,11 +89,10 @@ int overlay_mdp_send(overlay_mdp_frame *mdp,int flags,int timeout_ms) return -1; /* WHY("Timeout waiting for server response"); */ } -char overlay_mdp_client_socket_path[1024]; -int overlay_mdp_client_socket_path_len=-1; - int overlay_mdp_client_init() { + char overlay_mdp_client_socket_path[1024]; + int overlay_mdp_client_socket_path_len=-1; if (mdp_client_socket==-1) { /* Open socket to MDP server (thus connection is always local) */ if (0) WHY("Use of abstract name space socket for Linux not implemented"); @@ -147,12 +146,20 @@ int overlay_mdp_client_done() overlay_mdp_frame mdp; mdp.packetTypeAndFlags=MDP_GOODBYE; overlay_mdp_send(&mdp,0,0); + + // get the socket name and unlink it from the filesystem + struct sockaddr_un name; + socklen_t len=sizeof(name); + if (getsockname(mdp_client_socket, (struct sockaddr *)&name, &len)) + WHY_perror("getsockname()"); + else if(len>sizeof(sa_family_t) && len<=sizeof(name)){ + if (unlink(name.sun_path)) + WHY_perror("unlink()"); + } + + close(mdp_client_socket); } - if (overlay_mdp_client_socket_path_len>-1) - unlink(overlay_mdp_client_socket_path); - if (mdp_client_socket!=-1) - close(mdp_client_socket); mdp_client_socket=-1; return 0; }