1
0
mirror of https://github.com/fumiama/WireGold.git synced 2026-06-25 13:26:24 +08:00

fix 分片

This commit is contained in:
fumiama
2021-12-31 13:37:39 +08:00
parent defef19e4b
commit fb88615092

View File

@@ -79,22 +79,22 @@ func (l *Link) Write(p *head.Packet, istransfer bool) (n int, err error) {
return l.write(p, 0, istransfer, false) return l.write(p, 0, istransfer, false)
} }
data := p.Data data := p.Data
offset := 0 totl := len(data)
for len(data) > int(l.me.mtu) { i := 0
for ; totl > int(l.me.mtu); i += int(l.me.mtu) {
packet := *p packet := *p
packet.Data = data[offset*int(l.me.mtu) : (offset+1)*int(l.me.mtu)] packet.Data = data[i : i+int(l.me.mtu)]
i, err := l.write(&packet, uint16(offset), istransfer, true) cnt, err := l.write(&packet, uint16(i), istransfer, true)
n += i n += cnt
if err != nil { if err != nil {
return n, err return n, err
} }
data = data[(offset+1)*int(l.me.mtu):] data = data[i+int(l.me.mtu):]
offset++ totl -= int(l.me.mtu)
} }
packet := *p p.Data = data
packet.Data = data cnt, err := l.write(p, uint16(i), istransfer, false)
i, err := l.write(&packet, uint16(offset), istransfer, false) n += cnt
n += i
if err != nil { if err != nil {
return n, err return n, err
} }