From de5c573baabf925ee7cb868285ed4f14de5f7fe9 Mon Sep 17 00:00:00 2001 From: Mikio Hara Date: Wed, 8 Mar 2017 05:52:07 +0900 Subject: [PATCH] syscall: add Conn and RawConn interfaces 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 TryBot-Result: Gobot Gobot Reviewed-by: Russ Cox --- src/syscall/net.go | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 src/syscall/net.go diff --git a/src/syscall/net.go b/src/syscall/net.go new file mode 100644 index 0000000000..272d3afc38 --- /dev/null +++ b/src/syscall/net.go @@ -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) +} -- 2.48.1