forked from cisco-app-networking/networkservicemesh
/
utils.go
66 lines (56 loc) · 1.18 KB
/
utils.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package nsmd
import (
"net"
"golang.org/x/sys/unix"
"github.com/adodon2go/networkservicemesh/pkg/tools"
)
type customListener struct {
net.Listener
serverSocket string
}
type customConn struct {
net.Conn
localAddr *net.UnixAddr
}
func (c *customConn) RemoteAddr() net.Addr {
return c.localAddr
}
func NewCustomListener(socket string) (*customListener, error) {
if err := tools.SocketCleanup(socket); err != nil {
return nil, err
}
unix.Umask(socketMask)
listener, err := net.Listen("unix", socket)
if err == nil {
custList := &customListener{
Listener: listener,
serverSocket: socket,
}
return custList, nil
}
return nil, err
}
func (l *customListener) Accept() (net.Conn, error) {
conn, err := l.Listener.Accept()
if err != nil {
return nil, err
}
return &customConn{
Conn: conn,
localAddr: &net.UnixAddr{Net: "unix", Name: l.serverSocket},
}, nil
}
func GetLocalIPAddress() string {
addrs, err := net.InterfaceAddrs()
if err != nil {
return "127.0.0.1"
}
for _, a := range addrs {
if ipnet, ok := a.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
if ipnet.IP.To4() != nil {
return ipnet.IP.String()
}
}
}
return "127.0.0.1"
}