go.net/ipv4: fix sprious lookahead on IPConn-based PacketConn

Also improves test coverage for both payload and datagram I/O.

R=golang-dev, dave
CC=golang-dev
https://golang.org/cl/7304091
diff --git a/ipv4/header_test.go b/ipv4/header_test.go
index 0ac02ed..cc2fd8e 100644
--- a/ipv4/header_test.go
+++ b/ipv4/header_test.go
@@ -44,27 +44,24 @@
 	}
 	// TODO(mikio): Add platform dependent wire header formats when
 	// we support new platforms.
+
+	testHeader = &ipv4.Header{
+		Version:  ipv4.Version,
+		Len:      ipv4.HeaderLen,
+		TOS:      1,
+		TotalLen: 0xbeef,
+		ID:       0xcafe,
+		FragOff:  1500,
+		TTL:      255,
+		Protocol: 1,
+		Checksum: 0xdead,
+		Src:      net.IPv4(172, 16, 254, 254),
+		Dst:      net.IPv4(192, 168, 0, 1),
+	}
 )
 
-func testHeader() *ipv4.Header {
-	h := &ipv4.Header{}
-	h.Version = ipv4.Version
-	h.Len = ipv4.HeaderLen
-	h.TOS = 1
-	h.TotalLen = 0xbeef
-	h.ID = 0xcafe
-	h.FragOff = 1500
-	h.TTL = 255
-	h.Protocol = 1
-	h.Checksum = 0xdead
-	h.Src = net.IPv4(172, 16, 254, 254)
-	h.Dst = net.IPv4(192, 168, 0, 1)
-	return h
-}
-
 func TestMarshalHeader(t *testing.T) {
-	th := testHeader()
-	b, err := th.Marshal()
+	b, err := testHeader.Marshal()
 	if err != nil {
 		t.Fatalf("ipv4.Header.Marshal failed: %v", err)
 	}
@@ -92,8 +89,7 @@
 	if err != nil {
 		t.Fatalf("ipv4.ParseHeader failed: %v", err)
 	}
-	th := testHeader()
-	if !reflect.DeepEqual(h, th) {
-		t.Fatalf("ipv4.ParseHeader failed: %#v not equal %#v", h, th)
+	if !reflect.DeepEqual(h, testHeader) {
+		t.Fatalf("ipv4.ParseHeader failed: %#v not equal %#v", h, testHeader)
 	}
 }