OLD | NEW |
1 // Copyright 2009 The Go Authors. All rights reserved. | 1 // Copyright 2009 The Go Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style | 2 // Use of this source code is governed by a BSD-style |
3 // license that can be found in the LICENSE file. | 3 // license that can be found in the LICENSE file. |
4 | 4 |
5 // +build darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows | 5 // +build darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows |
6 | 6 |
7 package net | 7 package net |
8 | 8 |
9 import ( | 9 import ( |
10 "os" | 10 "os" |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
100 var lsa syscall.Sockaddr | 100 var lsa syscall.Sockaddr |
101 if laddr != nil { | 101 if laddr != nil { |
102 if lsa, err = laddr.sockaddr(fd.family); err != nil { | 102 if lsa, err = laddr.sockaddr(fd.family); err != nil { |
103 return err | 103 return err |
104 } else if lsa != nil { | 104 } else if lsa != nil { |
105 if err := syscall.Bind(fd.sysfd, lsa); err != nil { | 105 if err := syscall.Bind(fd.sysfd, lsa); err != nil { |
106 return os.NewSyscallError("bind", err) | 106 return os.NewSyscallError("bind", err) |
107 } | 107 } |
108 } | 108 } |
109 } | 109 } |
110 if err := fd.init(); err != nil { | |
111 return err | |
112 } | |
113 var rsa syscall.Sockaddr | 110 var rsa syscall.Sockaddr |
114 if raddr != nil { | 111 if raddr != nil { |
115 if rsa, err = raddr.sockaddr(fd.family); err != nil { | 112 if rsa, err = raddr.sockaddr(fd.family); err != nil { |
116 return err | 113 return err |
117 » » } else if rsa != nil { | 114 » » } |
118 » » » if !deadline.IsZero() { | 115 » » if err := fd.connect(lsa, rsa, deadline); err != nil { |
119 » » » » fd.setWriteDeadline(deadline) | 116 » » » return err |
120 » » » } | 117 » » } |
121 » » » if err := fd.connect(lsa, rsa); err != nil { | 118 » » fd.isConnected = true |
122 » » » » return err | 119 » } else { |
123 » » » } | 120 » » if err := fd.init(); err != nil { |
124 » » » fd.isConnected = true | 121 » » » return err |
125 » » » if !deadline.IsZero() { | |
126 » » » » fd.setWriteDeadline(noDeadline) | |
127 » » » } | |
128 } | 122 } |
129 } | 123 } |
130 lsa, _ = syscall.Getsockname(fd.sysfd) | 124 lsa, _ = syscall.Getsockname(fd.sysfd) |
131 if rsa, _ = syscall.Getpeername(fd.sysfd); rsa != nil { | 125 if rsa, _ = syscall.Getpeername(fd.sysfd); rsa != nil { |
132 fd.setAddr(toAddr(lsa), toAddr(rsa)) | 126 fd.setAddr(toAddr(lsa), toAddr(rsa)) |
133 } else { | 127 } else { |
134 fd.setAddr(toAddr(lsa), raddr) | 128 fd.setAddr(toAddr(lsa), raddr) |
135 } | 129 } |
136 return nil | 130 return nil |
137 } | 131 } |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
189 return os.NewSyscallError("bind", err) | 183 return os.NewSyscallError("bind", err) |
190 } | 184 } |
191 } | 185 } |
192 if err := fd.init(); err != nil { | 186 if err := fd.init(); err != nil { |
193 return err | 187 return err |
194 } | 188 } |
195 lsa, _ := syscall.Getsockname(fd.sysfd) | 189 lsa, _ := syscall.Getsockname(fd.sysfd) |
196 fd.setAddr(toAddr(lsa), nil) | 190 fd.setAddr(toAddr(lsa), nil) |
197 return nil | 191 return nil |
198 } | 192 } |
OLD | NEW |