]> Cypherpunks repositories - gostls13.git/commitdiff
syscall: add Conn and RawConn interfaces
authorMikio Hara <mikioh.mikioh@gmail.com>
Tue, 7 Mar 2017 20:52:07 +0000 (05:52 +0900)
committerMikio Hara <mikioh.mikioh@gmail.com>
Fri, 19 May 2017 09:10:04 +0000 (09:10 +0000)
This change adds Conn and RawConn interfaces which can be used to
manipulate raw network connection end points typically represented as
socket descriptors.

Fixes #19435.

Change-Id: Ide2d28eeab91bfd27473ab47a87bec69950b64c9
Reviewed-on: https://go-review.googlesource.com/37913
Run-TryBot: Mikio Hara <mikioh.mikioh@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
src/syscall/net.go [new file with mode: 0644]

diff --git a/src/syscall/net.go b/src/syscall/net.go
new file mode 100644 (file)
index 0000000..272d3af
--- /dev/null
@@ -0,0 +1,34 @@
+// 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 syscall
+
+// A RawConn is a raw network connection.
+type RawConn interface {
+       // Control invokes f on the underlying connection's file
+       // descriptor or handle.
+       // The file descriptor fd is guaranteed to remain valid while
+       // f executes but not after f returns.
+       Control(f func(fd uintptr)) error
+
+       // Read invokes f on the underlying connection's file
+       // descriptor or handle; f is expected to try to read from the
+       // file descriptor.
+       // If f returns true, Read returns. Otherwise Read blocks
+       // waiting for the connection to be ready for reading and
+       // tries again repeatedly.
+       // The file descriptor is guaranteed to remain valid while f
+       // executes but not after f returns.
+       Read(f func(fd uintptr) (done bool)) error
+
+       // Write is like Read but for writing.
+       Write(f func(fd uintptr) (done bool)) error
+}
+
+// Conn is implemented by some types in the net package to provide
+// access to the underlying file descriptor or handle.
+type Conn interface {
+       // SyscallConn returns a raw network connection.
+       SyscallConn() (RawConn, error)
+}