X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=daemon%2Fnet.c;h=f2ade0faf26c82bb0a3d07daa76cf0bb1b827e9f;hb=b870805e004de4bd5c9f78d35744581de6646770;hp=4147031c2048794da9a107a16d2f22c9a43ec863;hpb=e609992d099a1f5f7bf7fec49e767952f9c44e77;p=doldaconnect.git diff --git a/daemon/net.c b/daemon/net.c index 4147031..f2ade0f 100644 --- a/daemon/net.c +++ b/daemon/net.c @@ -288,8 +288,7 @@ void putsock(struct socket *sk) } break; } - if(sk->fd >= 0) - close(sk->fd); + closesock(sk); if(sk->remote != NULL) free(sk->remote); free(sk); @@ -487,6 +486,16 @@ static void sockflush(struct socket *sk) void closesock(struct socket *sk) { + struct sockaddr_un *un; + + if((sk->family == AF_UNIX) && !sockgetlocalname(sk, (struct sockaddr **)&un, NULL) && (un->sun_family == PF_UNIX)) + { + if(strchr(un->sun_path, '/')) + { + if(unlink(un->sun_path)) + flog(LOG_WARNING, "could not unlink UNIX socket %s: %s", un->sun_path, strerror(errno)); + } + } sk->state = SOCK_STL; close(sk->fd); sk->fd = -1; @@ -1061,7 +1070,8 @@ int sockgetlocalname(struct socket *sk, struct sockaddr **namebuf, socklen_t *le return(-1); } *namebuf = memcpy(smalloc(len), &name, len); - *lenbuf = len; + if(lenbuf != NULL) + *lenbuf = len; return(0); }