libgo: update to Go 1.11
[official-gcc.git] / libgo / go / net / tcpsock_plan9.go
blobf70ef6f43abb90707185d62a43c0b0688c3b35b6
1 // Copyright 2009 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.
5 package net
7 import (
8 "context"
9 "io"
10 "os"
13 func (c *TCPConn) readFrom(r io.Reader) (int64, error) {
14 return genericReadFrom(c, r)
17 func (sd *sysDialer) dialTCP(ctx context.Context, laddr, raddr *TCPAddr) (*TCPConn, error) {
18 if testHookDialTCP != nil {
19 return testHookDialTCP(ctx, sd.network, laddr, raddr)
21 return sd.doDialTCP(ctx, laddr, raddr)
24 func (sd *sysDialer) doDialTCP(ctx context.Context, laddr, raddr *TCPAddr) (*TCPConn, error) {
25 switch sd.network {
26 case "tcp", "tcp4", "tcp6":
27 default:
28 return nil, UnknownNetworkError(sd.network)
30 if raddr == nil {
31 return nil, errMissingAddress
33 fd, err := dialPlan9(ctx, sd.network, laddr, raddr)
34 if err != nil {
35 return nil, err
37 return newTCPConn(fd), nil
40 func (ln *TCPListener) ok() bool { return ln != nil && ln.fd != nil && ln.fd.ctl != nil }
42 func (ln *TCPListener) accept() (*TCPConn, error) {
43 fd, err := ln.fd.acceptPlan9()
44 if err != nil {
45 return nil, err
47 return newTCPConn(fd), nil
50 func (ln *TCPListener) close() error {
51 if err := ln.fd.pfd.Close(); err != nil {
52 return err
54 if _, err := ln.fd.ctl.WriteString("hangup"); err != nil {
55 ln.fd.ctl.Close()
56 return err
58 if err := ln.fd.ctl.Close(); err != nil {
59 return err
61 return nil
64 func (ln *TCPListener) file() (*os.File, error) {
65 f, err := ln.dup()
66 if err != nil {
67 return nil, err
69 return f, nil
72 func (sl *sysListener) listenTCP(ctx context.Context, laddr *TCPAddr) (*TCPListener, error) {
73 fd, err := listenPlan9(ctx, sl.network, laddr)
74 if err != nil {
75 return nil, err
77 return &TCPListener{fd}, nil