]> Cypherpunks repositories - gostls13.git/commitdiff
net: add test for RawConn.Control on Windows
authorMikio Hara <mikioh.mikioh@gmail.com>
Fri, 19 May 2017 10:03:35 +0000 (19:03 +0900)
committerMikio Hara <mikioh.mikioh@gmail.com>
Sat, 20 May 2017 00:45:56 +0000 (00:45 +0000)
This is a followup to https://go-review.googlesource.com/37039.

Updates #19435.

Change-Id: Ia795bd5158d26effa56e897698208ccf73f9e0d2
Reviewed-on: https://go-review.googlesource.com/43693
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
src/net/rawconn.go
src/net/rawconn_unix_test.go [moved from src/net/rawconn_test.go with 100% similarity]
src/net/rawconn_windows_test.go [new file with mode: 0644]

index 486a5e7d9d1b9aa38b69dfdb13f1ca0697196565..d67be644a34d165f43959505af8d1c0f054f6b3d 100644 (file)
@@ -9,8 +9,11 @@ import (
        "syscall"
 )
 
-// BUG(mikio): On NaCl, Plan 9 and Windows, the Control, Read and
-// Write methods of syscall.RawConn are not implemented.
+// BUG(mikio): On Windows, the Read and Write methods of
+// syscall.RawConn are not implemented.
+
+// BUG(mikio): On NaCl and Plan 9, the Control, Read and Write methods
+// of syscall.RawConn are not implemented.
 
 type rawConn struct {
        fd *netFD
diff --git a/src/net/rawconn_windows_test.go b/src/net/rawconn_windows_test.go
new file mode 100644 (file)
index 0000000..5fb6de7
--- /dev/null
@@ -0,0 +1,36 @@
+// Copyright 2017 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package net
+
+import (
+       "syscall"
+       "testing"
+)
+
+func TestRawConn(t *testing.T) {
+       c, err := newLocalPacketListener("udp")
+       if err != nil {
+               t.Fatal(err)
+       }
+       defer c.Close()
+       cc, err := c.(*UDPConn).SyscallConn()
+       if err != nil {
+               t.Fatal(err)
+       }
+
+       var operr error
+       fn := func(s uintptr) {
+               operr = syscall.SetsockoptInt(syscall.Handle(s), syscall.SOL_SOCKET, syscall.SO_REUSEADDR, 1)
+       }
+       err = cc.Control(fn)
+       if err != nil || operr != nil {
+               t.Fatal(err, operr)
+       }
+       c.Close()
+       err = cc.Control(fn)
+       if err == nil {
+               t.Fatal("should fail")
+       }
+}