Skip to content
Snippets Groups Projects
sockopt.go 722 B
Newer Older
  • Learn to ignore specific revisions
  • Oliver Herms's avatar
    Oliver Herms committed
    package server
    
    import (
    	"net"
    	"os"
    	"syscall"
    )
    
    const (
    	TCP_MD5SIG       = 14 // TCP MD5 Signature (RFC2385)
    	IPV6_MINHOPCOUNT = 73 // Generalized TTL Security Mechanism (RFC5082)
    )
    
    func SetListenTCPTTLSockopt(l *net.TCPListener, ttl int) error {
    	fi, family, err := extractFileAndFamilyFromTCPListener(l)
    	defer fi.Close()
    	if err != nil {
    		return err
    	}
    	return setsockoptIPTTL(int(fi.Fd()), family, ttl)
    }
    
    func setsockoptIPTTL(fd int, family int, value int) error {
    	level := syscall.IPPROTO_IP
    	name := syscall.IP_TTL
    	if family == syscall.AF_INET6 {
    		level = syscall.IPPROTO_IPV6
    		name = syscall.IPV6_UNICAST_HOPS
    	}
    	return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd, level, name, value))
    }