Esempio n. 1
0
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))
}
Esempio n. 2
0
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)
}
Esempio n. 3
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))
}
Esempio n. 4
0
File: sock.go Progetto: 8l/go-learn
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)
}
Esempio n. 5
0
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))
}
Esempio n. 6
0
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))
}