aboutsummaryrefslogtreecommitdiff
path: root/src/net/writev_test.go
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2016-10-20 17:14:47 -0400
committerRuss Cox <rsc@golang.org>2016-10-29 18:23:59 +0000
commit03d641b990bf83b0553d723a2b8764af48de4e11 (patch)
tree50d31945a92ed88a6b5c92564dd4865eeb989abb /src/net/writev_test.go
parent21a1fe4ddf77a49fee1d82d1891e66b1dce932bb (diff)
downloadgo-03d641b990bf83b0553d723a2b8764af48de4e11.tar.xz
net: break up >1GB reads and writes on stream connections
Also fix behavior of Buffers.WriteTo when writev returns an error. Fixes #16266. Change-Id: Idc9503408ce2cb460663768fab86035cbab11aef Reviewed-on: https://go-review.googlesource.com/31584 Run-TryBot: Russ Cox <rsc@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
Diffstat (limited to 'src/net/writev_test.go')
-rw-r--r--src/net/writev_test.go41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/net/writev_test.go b/src/net/writev_test.go
index cc53adcdd1..385cc12503 100644
--- a/src/net/writev_test.go
+++ b/src/net/writev_test.go
@@ -169,3 +169,44 @@ func testBuffer_writeTo(t *testing.T, chunks int, useCopy bool) {
return nil
})
}
+
+func TestWritevError(t *testing.T) {
+ ln, err := newLocalListener("tcp")
+ if err != nil {
+ t.Fatal(err)
+ }
+ defer ln.Close()
+
+ ch := make(chan Conn, 1)
+ go func() {
+ defer close(ch)
+ c, err := ln.Accept()
+ if err != nil {
+ t.Error(err)
+ return
+ }
+ ch <- c
+ }()
+ c1, err := Dial("tcp", ln.Addr().String())
+ if err != nil {
+ t.Fatal(err)
+ }
+ defer c1.Close()
+ c2 := <-ch
+ if c2 == nil {
+ t.Fatal("no server side connection")
+ }
+ c2.Close()
+
+ // 1 GB of data should be enough to notice the connection is gone.
+ // Just a few bytes is not enough.
+ // Arrange to reuse the same 1 MB buffer so that we don't allocate much.
+ buf := make([]byte, 1<<20)
+ buffers := make(Buffers, 1<<10)
+ for i := range buffers {
+ buffers[i] = buf
+ }
+ if _, err := buffers.WriteTo(c1); err == nil {
+ t.Fatalf("Buffers.WriteTo(closed conn) succeeded, want error", err)
+ }
+}