net: enforce timeouts for ReadFrom/WriteTo

Fixes #153.

R=r
https://golang.org/cl/154177
diff --git a/src/pkg/net/timeout_test.go b/src/pkg/net/timeout_test.go
index 57bfa09..c1ba399 100644
--- a/src/pkg/net/timeout_test.go
+++ b/src/pkg/net/timeout_test.go
@@ -5,11 +5,12 @@
 package net
 
 import (
+	"os";
 	"testing";
 	"time";
 )
 
-func testTimeout(t *testing.T, network, addr string) {
+func testTimeout(t *testing.T, network, addr string, readFrom bool) {
 	fd, err := Dial(network, "", addr);
 	defer fd.Close();
 	if err != nil {
@@ -18,21 +19,34 @@
 	t0 := time.Nanoseconds();
 	fd.SetReadTimeout(1e8);	// 100ms
 	var b [100]byte;
-	n, err1 := fd.Read(&b);
+	var n int;
+	var err1 os.Error;
+	if readFrom {
+		n, _, err1 = fd.(PacketConn).ReadFrom(&b)
+	} else {
+		n, err1 = fd.Read(&b)
+	}
 	t1 := time.Nanoseconds();
+	what := "Read";
+	if readFrom {
+		what = "ReadFrom"
+	}
 	if n != 0 || !isEAGAIN(err1) {
-		t.Errorf("fd.Read on %s %s did not return 0, EAGAIN: %v, %v", network, addr, n, err1)
+		t.Errorf("fd.%s on %s %s did not return 0, EAGAIN: %v, %v", what, network, addr, n, err1)
 	}
 	if t1-t0 < 0.5e8 || t1-t0 > 1.5e8 {
-		t.Errorf("fd.Read on %s %s took %f seconds, expected 0.1", network, addr, float64(t1-t0)/1e9)
+		t.Errorf("fd.%s on %s %s took %f seconds, expected 0.1", what, network, addr, float64(t1-t0)/1e9)
 	}
 }
 
-func TestTimeoutUDP(t *testing.T)	{ testTimeout(t, "udp", "127.0.0.1:53") }
+func TestTimeoutUDP(t *testing.T) {
+	testTimeout(t, "udp", "127.0.0.1:53", false);
+	testTimeout(t, "udp", "127.0.0.1:53", true);
+}
 
 func TestTimeoutTCP(t *testing.T) {
 	// 74.125.19.99 is www.google.com.
 	// could use dns, but dns depends on
 	// timeouts and this is the timeout test.
-	testTimeout(t, "tcp", "74.125.19.99:80")
+	testTimeout(t, "tcp", "74.125.19.99:80", false)
 }