diff --git a/internal/socket/socket_test.go b/internal/socket/socket_test.go
index f0363ee..e7161b7 100644
--- a/internal/socket/socket_test.go
+++ b/internal/socket/socket_test.go
@@ -306,40 +306,73 @@
 }
 
 func TestRace(t *testing.T) {
-	t.Skip("skipping known flaky test; see https://golang.org/issue/37338")
-
 	tests := []string{
 		`
 package main
-import "net"
-import "golang.org/x/net/ipv4"
+import (
+	"log"
+	"net"
+
+	"golang.org/x/net/ipv4"
+)
+
 var g byte
+
 func main() {
-	c, _ := net.ListenPacket("udp", "127.0.0.1:0")
+	c, err := net.ListenPacket("udp", "127.0.0.1:0")
+	if err != nil {
+		log.Fatalf("ListenPacket: %v", err)
+	}
 	cc := ipv4.NewPacketConn(c)
 	sync := make(chan bool)
 	src := make([]byte, 1)
 	dst := make([]byte, 1)
-	go func() { cc.WriteTo(src, nil, c.LocalAddr()) }()
-	go func() { cc.ReadFrom(dst); sync <- true }()
+	go func() {
+		if _, err := cc.WriteTo(src, nil, c.LocalAddr()); err != nil {
+			log.Fatalf("WriteTo: %v", err)
+		}
+	}()
+	go func() {
+		if _, _, _, err := cc.ReadFrom(dst); err != nil {
+			log.Fatalf("ReadFrom: %v", err)
+		}
+		sync <- true
+	}()
 	g = dst[0]
-	<- sync
+	<-sync
 }
 `,
 		`
 package main
-import "net"
-import "golang.org/x/net/ipv4"
+import (
+	"log"
+	"net"
+
+	"golang.org/x/net/ipv4"
+)
+
 func main() {
-	c, _ := net.ListenPacket("udp", "127.0.0.1:0")
+	c, err := net.ListenPacket("udp", "127.0.0.1:0")
+	if err != nil {
+		log.Fatalf("ListenPacket: %v", err)
+	}
 	cc := ipv4.NewPacketConn(c)
 	sync := make(chan bool)
 	src := make([]byte, 1)
 	dst := make([]byte, 1)
-	go func() { cc.WriteTo(src, nil, c.LocalAddr()); sync <- true }()
+	go func() {
+		if _, err := cc.WriteTo(src, nil, c.LocalAddr()); err != nil {
+			log.Fatalf("WriteTo: %v", err)
+		}
+		sync <- true
+	}()
 	src[0] = 0
-	go func() { cc.ReadFrom(dst) }()
-	<- sync
+	go func() {
+		if _, _, _, err := cc.ReadFrom(dst); err != nil {
+			log.Fatalf("ReadFrom: %v", err)
+		}
+	}()
+	<-sync
 }
 `,
 	}
@@ -357,17 +390,29 @@
 	}
 	defer os.RemoveAll(dir)
 	goBinary := filepath.Join(runtime.GOROOT(), "bin", "go")
+	t.Logf("%s version", goBinary)
+	got, err := exec.Command(goBinary, "version").CombinedOutput()
+	if len(got) > 0 {
+		t.Logf("%s", got)
+	}
+	if err != nil {
+		t.Fatalf("go version failed: %v", err)
+	}
 	for i, test := range tests {
 		t.Run(fmt.Sprintf("test %d", i), func(t *testing.T) {
 			src := filepath.Join(dir, fmt.Sprintf("test%d.go", i))
 			if err := ioutil.WriteFile(src, []byte(test), 0644); err != nil {
 				t.Fatalf("failed to write file: %v", err)
 			}
+			t.Logf("%s run -race %s", goBinary, src)
 			got, err := exec.Command(goBinary, "run", "-race", src).CombinedOutput()
+			if len(got) > 0 {
+				t.Logf("%s", got)
+			}
 			if strings.Contains(string(got), "-race requires cgo") {
 				t.Log("CGO is not enabled so can't use -race")
 			} else if !strings.Contains(string(got), "WARNING: DATA RACE") {
-				t.Errorf("race not detected for test %d: err:%v out:%s", i, err, string(got))
+				t.Errorf("race not detected for test %d: err:%v", i, err)
 			}
 		})
 	}
