func so_linger(fd int, d time.Duration) error { if d == 0 { return os.NewSyscallError("so_linger", syscall.SetsockoptLinger(fd, syscall.SOL_SOCKET, syscall.SO_LINGER, &syscall.Linger{0, 0})) } // cargo cult from src/net/tcpsockopt_unix.go d += (time.Second - time.Nanosecond) l := syscall.Linger{1, int32(d.Seconds())} return os.NewSyscallError("so_linger", syscall.SetsockoptLinger(fd, syscall.SOL_SOCKET, syscall.SO_LINGER, &l)) }
func setSockopts(fd int) error { err := syscall.SetNonblock(fd, true) if err != nil { return err } linger := syscall.Linger{Onoff: 1, Linger: 0} syscall.SetsockoptLinger(fd, syscall.SOL_SOCKET, syscall.SO_LINGER, &linger) return syscall.SetsockoptInt(fd, syscall.SOL_TCP, syscall.TCP_QUICKACK, 0) }
func setLinger(fd int, sec int) error { var l syscall.Linger if sec >= 0 { l.Onoff = 1 l.Linger = int32(sec) } else { l.Onoff = 0 l.Linger = 0 } return os.NewSyscallError("setsockopt", syscall.SetsockoptLinger(fd, syscall.SOL_SOCKET, syscall.SO_LINGER, &l)) }
func setLinger(fd *netFD, sec int) os.Error { var l syscall.Linger if sec >= 0 { l.Onoff = 1 l.Linger = int32(sec) } else { l.Onoff = 0 l.Linger = 0 } e := syscall.SetsockoptLinger(fd.fd, syscall.SOL_SOCKET, syscall.SO_LINGER, &l) return os.NewSyscallError("setsockopt", e) }
func setLinger(fd *netFD, sec int) error { var l syscall.Linger if sec >= 0 { l.Onoff = 1 l.Linger = int32(sec) } else { l.Onoff = 0 l.Linger = 0 } fd.incref() defer fd.decref() return os.NewSyscallError("setsockopt", syscall.SetsockoptLinger(fd.sysfd, syscall.SOL_SOCKET, syscall.SO_LINGER, &l)) }
func setLinger(fd *netFD, sec int) error { // 设置Linger var l syscall.Linger // 声明Linger结构 if sec >= 0 { // sec大于等于0,开启Linger l.Onoff = 1 l.Linger = int32(sec) } else { // sec小于0,关闭Linger l.Onoff = 0 l.Linger = 0 } if err := fd.incref(); err != nil { // 先增加fd的引用计数 return err } defer fd.decref() // 设置完成后减小fd的引用计数 return os.NewSyscallError("setsockopt", syscall.SetsockoptLinger(fd.sysfd, syscall.SOL_SOCKET, syscall.SO_LINGER, &l)) }