From 6440f010eec82abb9c999771a8f493af44c6b937 Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Thu, 21 Mar 2019 14:43:04 -0600 Subject: receive: implement flush semantics --- tun/tun_windows.go | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'tun/tun_windows.go') diff --git a/tun/tun_windows.go b/tun/tun_windows.go index dcb414a..fffd802 100644 --- a/tun/tun_windows.go +++ b/tun/tun_windows.go @@ -281,7 +281,11 @@ func (tun *NativeTun) Read(buff []byte, offset int) (int, error) { // Note: flush() and putTunPacket() assume the caller comes only from a single thread; there's no locking. -func (tun *NativeTun) flush() error { +func (tun *NativeTun) Flush() error { + if tun.wrBuff.offset == 0 { + return nil + } + // Get TUN data pipe. file, err := tun.getTUN() if err != nil { @@ -322,7 +326,7 @@ func (tun *NativeTun) putTunPacket(buff []byte) error { if tun.wrBuff.packetNum >= packetExchangeMax || tun.wrBuff.offset+pSize >= packetExchangeSize { // Exchange buffer is full -> flush first. - err := tun.flush() + err := tun.Flush() if err != nil { return err } @@ -345,9 +349,7 @@ func (tun *NativeTun) Write(buff []byte, offset int) (int, error) { if err != nil { return 0, err } - - // Flush write buffer. - return len(buff) - offset, tun.flush() + return len(buff) - offset, nil } // -- cgit v1.2.3-59-g8ed1b