code: func AddrPairUserid(local, remote net.Addr) (uid int, err error) {
  	lAddr, lOk := local.(*net.TCPAddr)
  	rAddr, rOk := remote.(*net.TCPAddr)
  	if !(lOk && rOk) {
  		return -1, fmt.Errorf("netutil: Could not convert Addr to TCPAddr")
  	}
  
  	localv4 := (lAddr.IP.To4() != nil)
  	remotev4 := (rAddr.IP.To4() != nil)
  	if localv4 != remotev4 {
  		return -1, fmt.Errorf("netutil: address pairs of different families; localv4=%v, remotev4=%v",
  			localv4, remotev4)
  	}
  
  	switch runtime.GOOS {
  	case "darwin":
  		return uidFromLsof(lAddr.IP, lAddr.Port, rAddr.IP, rAddr.Port)
  	case "freebsd":
  		return uidFromSockstat(lAddr.IP, lAddr.Port, rAddr.IP, rAddr.Port)
  	case "linux":
  		file := "/proc/net/tcp"
  		if !localv4 {
  			file = "/proc/net/tcp6"
  		}
  		f, err := os.Open(file)
  		if err != nil {
  			return -1, fmt.Errorf("Error opening %s: %v", file, err)
  		}
  		defer f.Close()
  		return uidFromProcReader(lAddr.IP, lAddr.Port, rAddr.IP, rAddr.Port, f)
  	}
  	return 0, ErrUnsupportedOS
  }
docs: // AddrPairUserid returns the local userid who owns the TCP connection
  // given by the local and remote ip:port (lipport and ripport,
  // respectively).  Returns ErrNotFound for the error if the TCP connection
  // isn't found.