Skip to content

Commit

Permalink
net: pass tests on Plan 9 again
Browse files Browse the repository at this point in the history
R=golang-dev
CC=golang-dev
https://golang.org/cl/6280045
  • Loading branch information
fhs authored and rsc committed Jun 6, 2012
1 parent ede6718 commit 42a76ef
Show file tree
Hide file tree
Showing 10 changed files with 48 additions and 42 deletions.
2 changes: 1 addition & 1 deletion src/pkg/net/dial_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ func TestSelfConnect(t *testing.T) {
n = 1000
}
switch runtime.GOOS {
case "darwin", "freebsd", "netbsd", "openbsd", "windows":
case "darwin", "freebsd", "netbsd", "openbsd", "plan9", "windows":
// Non-Linux systems take a long time to figure
// out that there is nothing listening on localhost.
n = 100
Expand Down
2 changes: 2 additions & 0 deletions src/pkg/net/ipraw_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// +build !plan9

package net

import (
Expand Down
19 changes: 19 additions & 0 deletions src/pkg/net/ipsock_plan9.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@ import (
"time"
)

// /sys/include/ape/sys/socket.h:/SOMAXCONN
var listenerBacklog = 5

// probeIPv6Stack returns two boolean values. If the first boolean value is
// true, kernel supports basic IPv6 functionality. If the second
// boolean value is true, kernel supports IPv6 IPv4-mapping.
Expand Down Expand Up @@ -48,6 +51,7 @@ func readPlan9Addr(proto, filename string) (addr Addr, err error) {
if err != nil {
return
}
defer f.Close()
n, err := f.Read(buf[:])
if err != nil {
return
Expand Down Expand Up @@ -192,6 +196,7 @@ func startPlan9(net string, addr Addr) (ctl *os.File, dest, proto, name string,
var buf [16]byte
n, err := f.Read(buf[:])
if err != nil {
f.Close()
return
}
return f, dest, proto, string(buf[:n]), nil
Expand All @@ -204,14 +209,17 @@ func dialPlan9(net string, laddr, raddr Addr) (c *plan9Conn, err error) {
}
_, err = f.WriteString("connect " + dest)
if err != nil {
f.Close()
return
}
laddr, err = readPlan9Addr(proto, "/net/"+proto+"/"+name+"/local")
if err != nil {
f.Close()
return
}
raddr, err = readPlan9Addr(proto, "/net/"+proto+"/"+name+"/remote")
if err != nil {
f.Close()
return
}
return newPlan9Conn(proto, name, f, laddr, raddr), nil
Expand All @@ -230,10 +238,12 @@ func listenPlan9(net string, laddr Addr) (l *plan9Listener, err error) {
}
_, err = f.WriteString("announce " + dest)
if err != nil {
f.Close()
return
}
laddr, err = readPlan9Addr(proto, "/net/"+proto+"/"+name+"/local")
if err != nil {
f.Close()
return
}
l = new(plan9Listener)
Expand All @@ -257,15 +267,18 @@ func (l *plan9Listener) acceptPlan9() (c *plan9Conn, err error) {
var buf [16]byte
n, err := f.Read(buf[:])
if err != nil {
f.Close()
return
}
name := string(buf[:n])
laddr, err := readPlan9Addr(l.proto, l.dir+"/local")
if err != nil {
f.Close()
return
}
raddr, err := readPlan9Addr(l.proto, l.dir+"/remote")
if err != nil {
f.Close()
return
}
return newPlan9Conn(l.proto, name, f, laddr, raddr), nil
Expand All @@ -287,3 +300,9 @@ func (l *plan9Listener) Close() error {
}

func (l *plan9Listener) Addr() Addr { return l.laddr }

// SetDeadline sets the deadline associated with the listener.
// A zero time value disables the deadline.
func (l *plan9Listener) SetDeadline(t time.Time) error {
return syscall.EPLAN9
}
2 changes: 2 additions & 0 deletions src/pkg/net/multicast_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// +build !plan9

package net

import (
Expand Down
5 changes: 5 additions & 0 deletions src/pkg/net/net_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,11 @@ func TestTCPListenClose(t *testing.T) {
}

func TestUDPListenClose(t *testing.T) {
switch runtime.GOOS {
case "plan9":
t.Logf("skipping test on %q", runtime.GOOS)
return
}
ln, err := ListenPacket("udp", "127.0.0.1:0")
if err != nil {
t.Fatalf("Listen failed: %v", err)
Expand Down
31 changes: 12 additions & 19 deletions src/pkg/net/tcpsock_plan9.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,32 +6,14 @@

package net

import (
"syscall"
"time"
)
import "syscall"

// TCPConn is an implementation of the Conn interface
// for TCP network connections.
type TCPConn struct {
plan9Conn
}

// SetDeadline implements the Conn SetDeadline method.
func (c *TCPConn) SetDeadline(t time.Time) error {
return syscall.EPLAN9
}

// SetReadDeadline implements the Conn SetReadDeadline method.
func (c *TCPConn) SetReadDeadline(t time.Time) error {
return syscall.EPLAN9
}

// SetWriteDeadline implements the Conn SetWriteDeadline method.
func (c *TCPConn) SetWriteDeadline(t time.Time) error {
return syscall.EPLAN9
}

// CloseRead shuts down the reading side of the TCP connection.
// Most callers should just use Close.
func (c *TCPConn) CloseRead() error {
Expand Down Expand Up @@ -76,6 +58,17 @@ type TCPListener struct {
plan9Listener
}

func (l *TCPListener) Close() error {
if l == nil || l.ctl == nil {
return syscall.EINVAL
}
if _, err := l.ctl.WriteString("hangup"); err != nil {
l.ctl.Close()
return err
}
return l.ctl.Close()
}

// ListenTCP announces on the TCP address laddr and returns a TCP listener.
// Net must be "tcp", "tcp4", or "tcp6".
// If laddr has a port of 0, it means to listen on some available port.
Expand Down
4 changes: 4 additions & 0 deletions src/pkg/net/udpsock.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@

package net

import "errors"

var ErrWriteToConnected = errors.New("use of WriteTo with pre-connected UDP")

// UDPAddr represents the address of a UDP end point.
type UDPAddr struct {
IP IP
Expand Down
16 changes: 0 additions & 16 deletions src/pkg/net/udpsock_plan9.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import (
"errors"
"os"
"syscall"
"time"
)

// UDPConn is the implementation of the Conn and PacketConn
Expand All @@ -19,21 +18,6 @@ type UDPConn struct {
plan9Conn
}

// SetDeadline implements the Conn SetDeadline method.
func (c *UDPConn) SetDeadline(t time.Time) error {
return syscall.EPLAN9
}

// SetReadDeadline implements the Conn SetReadDeadline method.
func (c *UDPConn) SetReadDeadline(t time.Time) error {
return syscall.EPLAN9
}

// SetWriteDeadline implements the Conn SetWriteDeadline method.
func (c *UDPConn) SetWriteDeadline(t time.Time) error {
return syscall.EPLAN9
}

// UDP-specific methods.

// ReadFromUDP reads a UDP packet from c, copying the payload into b.
Expand Down
7 changes: 1 addition & 6 deletions src/pkg/net/udpsock_posix.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,7 @@

package net

import (
"errors"
"syscall"
)

var ErrWriteToConnected = errors.New("use of WriteTo with pre-connected UDP")
import "syscall"

func sockaddrToUDP(sa syscall.Sockaddr) Addr {
switch sa := sa.(type) {
Expand Down
2 changes: 2 additions & 0 deletions src/pkg/net/unicast_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// +build !plan9

package net

import (
Expand Down

0 comments on commit 42a76ef

Please sign in to comment.