diff options
Diffstat (limited to 'src/pkg/net/sock.go')
| -rw-r--r-- | src/pkg/net/sock.go | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/src/pkg/net/sock.go b/src/pkg/net/sock.go index 867e328f1..dc139f04a 100644 --- a/src/pkg/net/sock.go +++ b/src/pkg/net/sock.go @@ -10,7 +10,6 @@ package net import ( "io" - "reflect" "syscall" ) @@ -28,10 +27,20 @@ func socket(net string, f, t, p int, la, ra syscall.Sockaddr, toAddr func(syscal syscall.CloseOnExec(s) syscall.ForkLock.RUnlock() - setDefaultSockopts(s, f, t) + err = setDefaultSockopts(s, f, t) + if err != nil { + closesocket(s) + return nil, err + } + var bla syscall.Sockaddr if la != nil { - err = syscall.Bind(s, la) + bla, err = listenerSockaddr(s, f, la, toAddr) + if err != nil { + closesocket(s) + return nil, err + } + err = syscall.Bind(s, bla) if err != nil { closesocket(s) return nil, err @@ -53,7 +62,12 @@ func socket(net string, f, t, p int, la, ra syscall.Sockaddr, toAddr func(syscal } sa, _ := syscall.Getsockname(s) - laddr := toAddr(sa) + var laddr Addr + if la != nil && bla != la { + laddr = toAddr(la) + } else { + laddr = toAddr(sa) + } sa, _ = syscall.Getpeername(s) raddr := toAddr(sa) @@ -61,14 +75,6 @@ func socket(net string, f, t, p int, la, ra syscall.Sockaddr, toAddr func(syscal return fd, nil } -type UnknownSocketError struct { - sa syscall.Sockaddr -} - -func (e *UnknownSocketError) Error() string { - return "unknown socket address type " + reflect.TypeOf(e.sa).String() -} - type writerOnly struct { io.Writer } |
