diff --git a/ipv4/control_stub.go b/ipv4/control_stub.go
index 5a2f7d8..a4bcfad 100644
--- a/ipv4/control_stub.go
+++ b/ipv4/control_stub.go
@@ -9,5 +9,5 @@
 import "golang.org/x/net/internal/socket"
 
 func setControlMessage(c *socket.Conn, opt *rawOpt, cf ControlFlags, on bool) error {
-	return errOpNoSupport
+	return errNotImplemented
 }
diff --git a/ipv4/dgramopt.go b/ipv4/dgramopt.go
index 3676449..c191c22 100644
--- a/ipv4/dgramopt.go
+++ b/ipv4/dgramopt.go
@@ -18,7 +18,7 @@
 	}
 	so, ok := sockOpts[ssoMulticastTTL]
 	if !ok {
-		return 0, errOpNoSupport
+		return 0, errNotImplemented
 	}
 	return so.GetInt(c.Conn)
 }
@@ -31,7 +31,7 @@
 	}
 	so, ok := sockOpts[ssoMulticastTTL]
 	if !ok {
-		return errOpNoSupport
+		return errNotImplemented
 	}
 	return so.SetInt(c.Conn, ttl)
 }
@@ -44,7 +44,7 @@
 	}
 	so, ok := sockOpts[ssoMulticastInterface]
 	if !ok {
-		return nil, errOpNoSupport
+		return nil, errNotImplemented
 	}
 	return so.getMulticastInterface(c.Conn)
 }
@@ -57,7 +57,7 @@
 	}
 	so, ok := sockOpts[ssoMulticastInterface]
 	if !ok {
-		return errOpNoSupport
+		return errNotImplemented
 	}
 	return so.setMulticastInterface(c.Conn, ifi)
 }
@@ -70,7 +70,7 @@
 	}
 	so, ok := sockOpts[ssoMulticastLoopback]
 	if !ok {
-		return false, errOpNoSupport
+		return false, errNotImplemented
 	}
 	on, err := so.GetInt(c.Conn)
 	if err != nil {
@@ -87,7 +87,7 @@
 	}
 	so, ok := sockOpts[ssoMulticastLoopback]
 	if !ok {
-		return errOpNoSupport
+		return errNotImplemented
 	}
 	return so.SetInt(c.Conn, boolint(on))
 }
@@ -107,7 +107,7 @@
 	}
 	so, ok := sockOpts[ssoJoinGroup]
 	if !ok {
-		return errOpNoSupport
+		return errNotImplemented
 	}
 	grp := netAddrToIP4(group)
 	if grp == nil {
@@ -125,7 +125,7 @@
 	}
 	so, ok := sockOpts[ssoLeaveGroup]
 	if !ok {
-		return errOpNoSupport
+		return errNotImplemented
 	}
 	grp := netAddrToIP4(group)
 	if grp == nil {
@@ -146,7 +146,7 @@
 	}
 	so, ok := sockOpts[ssoJoinSourceGroup]
 	if !ok {
-		return errOpNoSupport
+		return errNotImplemented
 	}
 	grp := netAddrToIP4(group)
 	if grp == nil {
@@ -167,7 +167,7 @@
 	}
 	so, ok := sockOpts[ssoLeaveSourceGroup]
 	if !ok {
-		return errOpNoSupport
+		return errNotImplemented
 	}
 	grp := netAddrToIP4(group)
 	if grp == nil {
@@ -189,7 +189,7 @@
 	}
 	so, ok := sockOpts[ssoBlockSourceGroup]
 	if !ok {
-		return errOpNoSupport
+		return errNotImplemented
 	}
 	grp := netAddrToIP4(group)
 	if grp == nil {
@@ -210,7 +210,7 @@
 	}
 	so, ok := sockOpts[ssoUnblockSourceGroup]
 	if !ok {
-		return errOpNoSupport
+		return errNotImplemented
 	}
 	grp := netAddrToIP4(group)
 	if grp == nil {
@@ -231,7 +231,7 @@
 	}
 	so, ok := sockOpts[ssoICMPFilter]
 	if !ok {
-		return nil, errOpNoSupport
+		return nil, errNotImplemented
 	}
 	return so.getICMPFilter(c.Conn)
 }
@@ -244,7 +244,7 @@
 	}
 	so, ok := sockOpts[ssoICMPFilter]
 	if !ok {
-		return errOpNoSupport
+		return errNotImplemented
 	}
 	return so.setICMPFilter(c.Conn, f)
 }
@@ -258,7 +258,7 @@
 	}
 	so, ok := sockOpts[ssoAttachFilter]
 	if !ok {
-		return errOpNoSupport
+		return errNotImplemented
 	}
 	return so.setBPF(c.Conn, filter)
 }
diff --git a/ipv4/endpoint.go b/ipv4/endpoint.go
index 5009463..4a6d7a8 100644
--- a/ipv4/endpoint.go
+++ b/ipv4/endpoint.go
@@ -177,7 +177,7 @@
 	}
 	so, ok := sockOpts[ssoHeaderPrepend]
 	if !ok {
-		return nil, errOpNoSupport
+		return nil, errNotImplemented
 	}
 	if err := so.SetInt(r.dgramOpt.Conn, boolint(true)); err != nil {
 		return nil, err
diff --git a/ipv4/genericopt.go b/ipv4/genericopt.go
index 587ae4a..51c1237 100644
--- a/ipv4/genericopt.go
+++ b/ipv4/genericopt.go
@@ -11,7 +11,7 @@
 	}
 	so, ok := sockOpts[ssoTOS]
 	if !ok {
-		return 0, errOpNoSupport
+		return 0, errNotImplemented
 	}
 	return so.GetInt(c.Conn)
 }
@@ -24,7 +24,7 @@
 	}
 	so, ok := sockOpts[ssoTOS]
 	if !ok {
-		return errOpNoSupport
+		return errNotImplemented
 	}
 	return so.SetInt(c.Conn, tos)
 }
@@ -36,7 +36,7 @@
 	}
 	so, ok := sockOpts[ssoTTL]
 	if !ok {
-		return 0, errOpNoSupport
+		return 0, errNotImplemented
 	}
 	return so.GetInt(c.Conn)
 }
@@ -49,7 +49,7 @@
 	}
 	so, ok := sockOpts[ssoTTL]
 	if !ok {
-		return errOpNoSupport
+		return errNotImplemented
 	}
 	return so.SetInt(c.Conn, ttl)
 }
diff --git a/ipv4/helper.go b/ipv4/helper.go
index ffedd4e..d054952 100644
--- a/ipv4/helper.go
+++ b/ipv4/helper.go
@@ -18,7 +18,6 @@
 	errHeaderTooShort           = errors.New("header too short")
 	errExtHeaderTooShort        = errors.New("extension header too short")
 	errInvalidConnType          = errors.New("invalid conn type")
-	errOpNoSupport              = errors.New("operation not supported")
 	errNoSuchInterface          = errors.New("no such interface")
 	errNoSuchMulticastInterface = errors.New("no such multicast interface")
 	errNotImplemented           = errors.New("not implemented on " + runtime.GOOS + "/" + runtime.GOARCH)
diff --git a/ipv4/sockopt_posix.go b/ipv4/sockopt_posix.go
index e96955b..79ac27f 100644
--- a/ipv4/sockopt_posix.go
+++ b/ipv4/sockopt_posix.go
@@ -39,7 +39,7 @@
 		return nil, err
 	}
 	if n != sizeofICMPFilter {
-		return nil, errOpNoSupport
+		return nil, errNotImplemented
 	}
 	return (*ICMPFilter)(unsafe.Pointer(&b[0])), nil
 }
@@ -58,7 +58,7 @@
 	case ssoTypeGroupReq:
 		return so.setGroupReq(c, ifi, grp)
 	default:
-		return errOpNoSupport
+		return errNotImplemented
 	}
 }
 
diff --git a/ipv4/sockopt_stub.go b/ipv4/sockopt_stub.go
index 23249b7..445d3c2 100644
--- a/ipv4/sockopt_stub.go
+++ b/ipv4/sockopt_stub.go
@@ -14,29 +14,29 @@
 )
 
 func (so *sockOpt) getMulticastInterface(c *socket.Conn) (*net.Interface, error) {
-	return nil, errOpNoSupport
+	return nil, errNotImplemented
 }
 
 func (so *sockOpt) setMulticastInterface(c *socket.Conn, ifi *net.Interface) error {
-	return errOpNoSupport
+	return errNotImplemented
 }
 
 func (so *sockOpt) getICMPFilter(c *socket.Conn) (*ICMPFilter, error) {
-	return nil, errOpNoSupport
+	return nil, errNotImplemented
 }
 
 func (so *sockOpt) setICMPFilter(c *socket.Conn, f *ICMPFilter) error {
-	return errOpNoSupport
+	return errNotImplemented
 }
 
 func (so *sockOpt) setGroup(c *socket.Conn, ifi *net.Interface, grp net.IP) error {
-	return errOpNoSupport
+	return errNotImplemented
 }
 
 func (so *sockOpt) setSourceGroup(c *socket.Conn, ifi *net.Interface, grp, src net.IP) error {
-	return errOpNoSupport
+	return errNotImplemented
 }
 
 func (so *sockOpt) setBPF(c *socket.Conn, f []bpf.RawInstruction) error {
-	return errOpNoSupport
+	return errNotImplemented
 }
diff --git a/ipv4/sys_asmreq_stub.go b/ipv4/sys_asmreq_stub.go
index f391920..dc82806 100644
--- a/ipv4/sys_asmreq_stub.go
+++ b/ipv4/sys_asmreq_stub.go
@@ -13,13 +13,13 @@
 )
 
 func (so *sockOpt) setIPMreq(c *socket.Conn, ifi *net.Interface, grp net.IP) error {
-	return errOpNoSupport
+	return errNotImplemented
 }
 
 func (so *sockOpt) getMulticastIf(c *socket.Conn) (*net.Interface, error) {
-	return nil, errOpNoSupport
+	return nil, errNotImplemented
 }
 
 func (so *sockOpt) setMulticastIf(c *socket.Conn, ifi *net.Interface) error {
-	return errOpNoSupport
+	return errNotImplemented
 }
diff --git a/ipv4/sys_asmreqn_stub.go b/ipv4/sys_asmreqn_stub.go
index 0711d3d..48ef556 100644
--- a/ipv4/sys_asmreqn_stub.go
+++ b/ipv4/sys_asmreqn_stub.go
@@ -13,9 +13,9 @@
 )
 
 func (so *sockOpt) getIPMreqn(c *socket.Conn) (*net.Interface, error) {
-	return nil, errOpNoSupport
+	return nil, errNotImplemented
 }
 
 func (so *sockOpt) setIPMreqn(c *socket.Conn, ifi *net.Interface, grp net.IP) error {
-	return errOpNoSupport
+	return errNotImplemented
 }
diff --git a/ipv4/sys_bpf_stub.go b/ipv4/sys_bpf_stub.go
index 9a21320..5c98642 100644
--- a/ipv4/sys_bpf_stub.go
+++ b/ipv4/sys_bpf_stub.go
@@ -12,5 +12,5 @@
 )
 
 func (so *sockOpt) setAttachFilter(c *socket.Conn, f []bpf.RawInstruction) error {
-	return errOpNoSupport
+	return errNotImplemented
 }
diff --git a/ipv4/sys_ssmreq_stub.go b/ipv4/sys_ssmreq_stub.go
index e6b7623..c092167 100644
--- a/ipv4/sys_ssmreq_stub.go
+++ b/ipv4/sys_ssmreq_stub.go
@@ -13,9 +13,9 @@
 )
 
 func (so *sockOpt) setGroupReq(c *socket.Conn, ifi *net.Interface, grp net.IP) error {
-	return errOpNoSupport
+	return errNotImplemented
 }
 
 func (so *sockOpt) setGroupSourceReq(c *socket.Conn, ifi *net.Interface, grp, src net.IP) error {
-	return errOpNoSupport
+	return errNotImplemented
 }
