]> Cypherpunks repositories - gostls13.git/commitdiff
net: Plan 9 fixes
authorFazlul Shahriar <fshahriar@gmail.com>
Mon, 31 Oct 2011 15:47:44 +0000 (11:47 -0400)
committerRuss Cox <rsc@golang.org>
Mon, 31 Oct 2011 15:47:44 +0000 (11:47 -0400)
Makes all tests pass.

R=rsc
CC=golang-dev
https://golang.org/cl/5320041

src/pkg/net/lookup_plan9.go
src/pkg/net/lookup_test.go
src/pkg/net/net_test.go
src/pkg/net/tcpsock_plan9.go
src/pkg/net/timeout_test.go

index d779f4a5d71880f6fa15062b11fa9df240ae492a..a14c592e8f63fa75902560d6aaa7f8d736816e69 100644 (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
index c0fcd260472df948b5faa77a739e250a33bdafcd..6b7e53d0c6cbf42242e8d8af419628bce1d1f5b5 100644 (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 {
index 3754bc90b3318ee6d16795aedbfb24dcea8b3caa..94d620e47edae84706090a659a5976be8bca9bac 100644 (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 {
index f4f6e9fee16a2a695b46c7c6e87e2dd7fcd6869b..3319e57c3384d9208b9895ad192e1be1c5f103a8 100644 (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.
index 0dbab5846a6885ec13a130b6c5c5402e7a42b13f..2c2c36fff5e772095f3f305e7275852b4356845d 100644 (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)