func SendLocalToRemote(stream libvirt.VirStream, volume libvirt.VirStorageVol, data []byte) error { err := libvirt.StorageVolUpload(volume, stream, 0, uint64(len(data))) if err != nil { return err } //transfter volume remain := len(data) sent := 0 offset := 0 DATALEN := 16384 for remain > 0 { if remain > DATALEN { sent = stream.Send(data[offset:], DATALEN) } else { sent = stream.Send(data[offset:], remain) } if sent < 0 { stream.Abort() return errors.New("Stream Send return 0") } if sent == 0 { break } remain -= sent offset += sent } err = stream.Finish() if err != nil { return err } return nil }