code: func Put(via *net.UnixConn, files ...*os.File) error {
  	if len(files) == 0 {
  		return nil
  	}
  
  	viaf, err := via.File()
  	if err != nil {
  		return err
  	}
  	socket := int(viaf.Fd())
  	defer viaf.Close()
  
  	fds := make([]int, len(files))
  	for i := range files {
  		fds[i] = int(files[i].Fd())
  	}
  
  	rights := syscall.UnixRights(fds...)
  	return syscall.Sendmsg(socket, nil, rights, nil, 0)
  }
docs: // Put sends file descriptors to Unix domain socket.
  //
  // Please note that the number of descriptors in one message is limited
  // and is rather small.
  // Use conn.File() to get a file if you want to put a network connection.