From: Mikio Hara Date: Tue, 7 Mar 2017 20:52:07 +0000 (+0900) Subject: syscall: add Conn and RawConn interfaces X-Git-Tag: go1.9beta1~213 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=de5c573baabf925ee7cb868285ed4f14de5f7fe9;p=gostls13.git 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 --- 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) +}