1// Copyright 2017 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package syscall
6
7// A RawConn is a raw network connection.
8type RawConn interface {
9	// Control invokes f on the underlying connection's file
10	// descriptor or handle.
11	// The file descriptor fd is guaranteed to remain valid while
12	// f executes but not after f returns.
13	Control(f func(fd uintptr)) error
14
15	// Read invokes f on the underlying connection's file
16	// descriptor or handle; f is expected to try to read from the
17	// file descriptor.
18	// If f returns true, Read returns. Otherwise Read blocks
19	// waiting for the connection to be ready for reading and
20	// tries again repeatedly.
21	// The file descriptor is guaranteed to remain valid while f
22	// executes but not after f returns.
23	Read(f func(fd uintptr) (done bool)) error
24
25	// Write is like Read but for writing.
26	Write(f func(fd uintptr) (done bool)) error
27}
28
29// Conn is implemented by some types in the net and os packages to provide
30// access to the underlying file descriptor or handle.
31type Conn interface {
32	// SyscallConn returns a raw network connection.
33	SyscallConn() (RawConn, error)
34}
35