closesocket(s)
return nil, err
}
- if err := fd.init(); err != nil {
- fd.Close()
- return nil, err
- }
// This function makes a network file descriptor for stream
// and datagram dialers, stream and datagram listeners.
if laddr != nil && raddr == nil {
switch t {
case syscall.SOCK_STREAM, syscall.SOCK_SEQPACKET:
- if err := fd.listenStream(laddr, toAddr); err != nil {
+ if err := fd.listenStream(laddr, listenerBacklog, toAddr); err != nil {
fd.Close()
return nil, err
}
}
}
}
+ if err := fd.init(); err != nil {
+ return err
+ }
var rsa syscall.Sockaddr
if raddr != nil {
if rsa, err = raddr.sockaddr(fd.family); err != nil {
return nil
}
-func (fd *netFD) listenStream(laddr sockaddr, toAddr func(syscall.Sockaddr) Addr) error {
+func (fd *netFD) listenStream(laddr sockaddr, backlog int, toAddr func(syscall.Sockaddr) Addr) error {
if err := setDefaultListenerSockopts(fd.sysfd); err != nil {
return err
}
return os.NewSyscallError("bind", err)
}
}
+ if err := syscall.Listen(fd.sysfd, backlog); err != nil {
+ return os.NewSyscallError("listen", err)
+ }
+ if err := fd.init(); err != nil {
+ return err
+ }
lsa, _ := syscall.Getsockname(fd.sysfd)
fd.setAddr(toAddr(lsa), nil)
return nil
return os.NewSyscallError("bind", err)
}
}
+ if err := fd.init(); err != nil {
+ return err
+ }
lsa, _ := syscall.Getsockname(fd.sysfd)
fd.setAddr(toAddr(lsa), nil)
return nil
if err != nil {
return nil, err
}
- err = syscall.Listen(fd.sysfd, listenerBacklog)
- if err != nil {
- fd.Close()
- return nil, &OpError{Op: "listen", Net: net, Addr: laddr, Err: err}
- }
return &UnixListener{fd, laddr.Name}, nil
}