1 // Copyright 2009 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
5 // +build darwin freebsd linux netbsd openbsd windows
16 var listenerBacklog
= maxListenerBacklog()
18 // Generic socket creation.
19 func socket(net
string, f
, t
, p
int, ipv6only
bool, ulsa
, ursa syscall
.Sockaddr
, deadline time
.Time
, toAddr
func(syscall
.Sockaddr
) Addr
) (fd
*netFD
, err error
) {
20 s
, err
:= sysSocket(f
, t
, p
)
25 if err
= setDefaultSockopts(s
, f
, t
, ipv6only
); err
!= nil {
31 // We provide a socket that listens to a wildcard
32 // address with reusable UDP port when the given ulsa
33 // is an appropriate UDP multicast address prefix.
34 // This makes it possible for a single UDP listener
35 // to join multiple different group addresses, for
36 // multiple UDP listeners that listen on the same UDP
37 // port to join the same group address.
38 if ulsa
, err
= listenerSockaddr(s
, f
, ulsa
, toAddr
); err
!= nil {
42 if err
= syscall
.Bind(s
, ulsa
); err
!= nil {
48 if fd
, err
= newFD(s
, f
, t
, net
); err
!= nil {
54 fd
.wdeadline
.setTime(deadline
)
55 if err
= fd
.connect(ursa
); err
!= nil {
63 lsa
, _
:= syscall
.Getsockname(s
)
65 rsa
, _
:= syscall
.Getpeername(s
)
67 fd
.setAddr(laddr
, raddr
)