net: Plan 9 fixes

Makes all tests pass.

R=rsc
CC=golang-dev
https://golang.org/cl/5320041
This commit is contained in:
Fazlul Shahriar 2011-10-31 11:47:44 -04:00 committed by Russ Cox
parent 350a5ce64f
commit 5842336089
5 changed files with 42 additions and 4 deletions

View file

@ -49,7 +49,7 @@ func queryCS(net, host, service string) (res []string, err os.Error) {
func queryCS1(net string, ip IP, port int) (clone, dest string, err os.Error) {
ips := "*"
if !ip.IsUnspecified() {
if len(ip) != 0 && !ip.IsUnspecified() {
ips = ip.String()
}
lines, err := queryCS(net, ips, itoa(port))
@ -215,7 +215,16 @@ func LookupMX(name string) (mx []*MX, err os.Error) {
// LookupTXT returns the DNS TXT records for the given domain name.
func LookupTXT(name string) (txt []string, err os.Error) {
return nil, os.NewError("net.LookupTXT is not implemented on Plan 9")
lines, err := queryDNS(name, "txt")
if err != nil {
return
}
for _, line := range lines {
if i := byteIndex(line, '\t'); i >= 0 {
txt = append(txt, line[i+1:])
}
}
return
}
// LookupAddr performs a reverse lookup for the given address, returning a list

View file

@ -52,8 +52,8 @@ func TestGmailMX(t *testing.T) {
}
func TestGmailTXT(t *testing.T) {
if runtime.GOOS == "windows" || runtime.GOOS == "plan9" {
t.Logf("LookupTXT is not implemented on Windows or Plan 9")
if runtime.GOOS == "windows" {
t.Logf("LookupTXT is not implemented on Windows")
return
}
if testing.Short() || avoidMacFirewall {

View file

@ -8,6 +8,7 @@ import (
"flag"
"os"
"regexp"
"runtime"
"testing"
)
@ -128,6 +129,9 @@ func TestReverseAddress(t *testing.T) {
}
func TestShutdown(t *testing.T) {
if runtime.GOOS == "plan9" {
return
}
l, err := Listen("tcp", "127.0.0.1:0")
if err != nil {
if l, err = Listen("tcp6", "[::1]:0"); err != nil {

View file

@ -16,6 +16,24 @@ type TCPConn struct {
plan9Conn
}
// CloseRead shuts down the reading side of the TCP connection.
// Most callers should just use Close.
func (c *TCPConn) CloseRead() os.Error {
if !c.ok() {
return os.EINVAL
}
return os.EPLAN9
}
// CloseWrite shuts down the writing side of the TCP connection.
// Most callers should just use Close.
func (c *TCPConn) CloseWrite() os.Error {
if !c.ok() {
return os.EINVAL
}
return os.EPLAN9
}
// DialTCP connects to the remote address raddr on the network net,
// which must be "tcp", "tcp4", or "tcp6". If laddr is not nil, it is used
// as the local address for the connection.

View file

@ -6,6 +6,7 @@ package net
import (
"os"
"runtime"
"testing"
"time"
)
@ -41,11 +42,17 @@ func testTimeout(t *testing.T, network, addr string, readFrom bool) {
}
func TestTimeoutUDP(t *testing.T) {
if runtime.GOOS == "plan9" {
return
}
testTimeout(t, "udp", "127.0.0.1:53", false)
testTimeout(t, "udp", "127.0.0.1:53", true)
}
func TestTimeoutTCP(t *testing.T) {
if runtime.GOOS == "plan9" {
return
}
// set up a listener that won't talk back
listening := make(chan string)
done := make(chan int)