converge/pkg/support/ioutils/retrywriter.go
Erik Brakkee e9fdece4ec Updated packages
Dealing with short writes.
A more clean implementation of SynchronizeStreams to give a higher
guarantee that all data will be written before the connections are
closed.
2024-12-25 19:42:56 +01:00

28 lines
380 B
Go

package ioutils
import (
"io"
"time"
)
type RetryWriter struct {
io.Writer
}
func (w *RetryWriter) Write(p []byte) (int, error) {
ntotal := 0
var err error
for len(p) > 0 {
n, err := w.Writer.Write(p)
p = p[n:]
ntotal += n
if err != nil && err != io.ErrShortWrite {
break
}
if len(p) > 0 {
time.Sleep(10 * time.Millisecond)
}
}
return ntotal, err
}