"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
--- /dev/null
+// 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")
+ }
+}