1 // Copyright 2009 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
14 func TestShutdown(t *testing.T) {
15 if runtime.GOOS == "plan9" {
16 t.Logf("skipping test on %q", runtime.GOOS)
19 l, err := Listen("tcp", "127.0.0.1:0")
21 if l, err = Listen("tcp6", "[::1]:0"); err != nil {
22 t.Fatalf("ListenTCP on :0: %v", err)
29 t.Fatalf("Accept: %v", err)
32 n, err := c.Read(buf[:])
33 if n != 0 || err != io.EOF {
34 t.Fatalf("server Read = %d, %v; want 0, io.EOF", n, err)
36 c.Write([]byte("response"))
40 c, err := Dial("tcp", l.Addr().String())
42 t.Fatalf("Dial: %v", err)
46 err = c.(*TCPConn).CloseWrite()
48 t.Fatalf("CloseWrite: %v", err)
51 n, err := c.Read(buf[:])
53 t.Fatalf("client Read: %d, %v", n, err)
55 got := string(buf[:n])
56 if got != "response" {
57 t.Errorf("read = %q, want \"response\"", got)
61 func TestTCPListenClose(t *testing.T) {
62 l, err := Listen("tcp", "127.0.0.1:0")
64 t.Fatalf("Listen failed: %v", err)
67 done := make(chan bool, 1)
69 time.Sleep(100 * time.Millisecond)
75 t.Error("Accept succeeded")
77 t.Logf("Accept timeout error: %s (any error is fine)", err)
83 case <-time.After(2 * time.Second):
84 t.Fatal("timeout waiting for TCP close")
88 func TestUDPListenClose(t *testing.T) {
89 l, err := ListenPacket("udp", "127.0.0.1:0")
91 t.Fatalf("Listen failed: %v", err)
94 buf := make([]byte, 1000)
95 done := make(chan bool, 1)
97 time.Sleep(100 * time.Millisecond)
101 _, _, err = l.ReadFrom(buf)
103 t.Error("ReadFrom succeeded")
105 t.Logf("ReadFrom timeout error: %s (any error is fine)", err)
111 case <-time.After(2 * time.Second):
112 t.Fatal("timeout waiting for UDP close")