mirror of
https://github.com/golang/go
synced 2024-11-18 08:44:43 -07:00
net: do not unlink unix socket in UnixListener created from fd
Fixes #11826. Change-Id: Id220dd558ca8d8d78c01975087122d27757deea0 Reviewed-on: https://go-review.googlesource.com/17458 Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
parent
f939ee13ae
commit
a4fd325c17
@ -91,7 +91,7 @@ func fileListener(f *os.File) (Listener, error) {
|
|||||||
case *TCPAddr:
|
case *TCPAddr:
|
||||||
return &TCPListener{fd}, nil
|
return &TCPListener{fd}, nil
|
||||||
case *UnixAddr:
|
case *UnixAddr:
|
||||||
return &UnixListener{fd, laddr.Name}, nil
|
return &UnixListener{fd: fd, path: laddr.Name, unlink: false}, nil
|
||||||
}
|
}
|
||||||
fd.Close()
|
fd.Close()
|
||||||
return nil, syscall.EINVAL
|
return nil, syscall.EINVAL
|
||||||
|
@ -273,8 +273,9 @@ func dialUnix(net string, laddr, raddr *UnixAddr, deadline time.Time) (*UnixConn
|
|||||||
// typically use variables of type Listener instead of assuming Unix
|
// typically use variables of type Listener instead of assuming Unix
|
||||||
// domain sockets.
|
// domain sockets.
|
||||||
type UnixListener struct {
|
type UnixListener struct {
|
||||||
fd *netFD
|
fd *netFD
|
||||||
path string
|
path string
|
||||||
|
unlink bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListenUnix announces on the Unix domain socket laddr and returns a
|
// ListenUnix announces on the Unix domain socket laddr and returns a
|
||||||
@ -292,7 +293,7 @@ func ListenUnix(net string, laddr *UnixAddr) (*UnixListener, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, &OpError{Op: "listen", Net: net, Source: nil, Addr: laddr.opAddr(), Err: err}
|
return nil, &OpError{Op: "listen", Net: net, Source: nil, Addr: laddr.opAddr(), Err: err}
|
||||||
}
|
}
|
||||||
return &UnixListener{fd: fd, path: fd.laddr.String()}, nil
|
return &UnixListener{fd: fd, path: fd.laddr.String(), unlink: true}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// AcceptUnix accepts the next incoming call and returns the new
|
// AcceptUnix accepts the next incoming call and returns the new
|
||||||
@ -335,7 +336,7 @@ func (l *UnixListener) Close() error {
|
|||||||
// is at least compatible with the auto-remove
|
// is at least compatible with the auto-remove
|
||||||
// sequence in ListenUnix. It's only non-Go
|
// sequence in ListenUnix. It's only non-Go
|
||||||
// programs that can mess us up.
|
// programs that can mess us up.
|
||||||
if l.path[0] != '@' {
|
if l.path[0] != '@' && l.unlink {
|
||||||
syscall.Unlink(l.path)
|
syscall.Unlink(l.path)
|
||||||
}
|
}
|
||||||
err := l.fd.Close()
|
err := l.fd.Close()
|
||||||
|
Loading…
Reference in New Issue
Block a user