diff --git a/src/libraries/System.Net.Primitives/src/Resources/Strings.resx b/src/libraries/System.Net.Primitives/src/Resources/Strings.resx
index 958a0e2e269f99..65d4809398b3b2 100644
--- a/src/libraries/System.Net.Primitives/src/Resources/Strings.resx
+++ b/src/libraries/System.Net.Primitives/src/Resources/Strings.resx
@@ -64,7 +64,7 @@
This property is not implemented by this class.
- The AddressFamily {0} is not valid for the {1} end point, use {2} instead.
+ The AddressFamily {0} is not valid for the {1} end point.The supplied {0} is an invalid size for the {1} end point.
diff --git a/src/libraries/System.Net.Primitives/src/System/Net/IPEndPoint.cs b/src/libraries/System.Net.Primitives/src/System/Net/IPEndPoint.cs
index 3531f266e6c504..ff47d2fbc515ef 100644
--- a/src/libraries/System.Net.Primitives/src/System/Net/IPEndPoint.cs
+++ b/src/libraries/System.Net.Primitives/src/System/Net/IPEndPoint.cs
@@ -155,9 +155,9 @@ public override EndPoint Create(SocketAddress socketAddress)
{
ArgumentNullException.ThrowIfNull(socketAddress);
- if (socketAddress.Family != AddressFamily)
- {
- throw new ArgumentException(SR.Format(SR.net_InvalidAddressFamily, socketAddress.Family.ToString(), GetType().FullName, AddressFamily.ToString()), nameof(socketAddress));
+ if (socketAddress.Family is not (AddressFamily.InterNetwork or AddressFamily.InterNetworkV6))
+ {
+ throw new ArgumentException(SR.Format(SR.net_InvalidAddressFamily, socketAddress.Family.ToString(), GetType().FullName), nameof(socketAddress));
}
int minSize = AddressFamily == AddressFamily.InterNetworkV6 ? SocketAddress.IPv6AddressSize : SocketAddress.IPv4AddressSize;
diff --git a/src/libraries/System.Net.Primitives/tests/FunctionalTests/IPEndPointTest.cs b/src/libraries/System.Net.Primitives/tests/FunctionalTests/IPEndPointTest.cs
index bb9b95d438e99f..c233dee628dfeb 100644
--- a/src/libraries/System.Net.Primitives/tests/FunctionalTests/IPEndPointTest.cs
+++ b/src/libraries/System.Net.Primitives/tests/FunctionalTests/IPEndPointTest.cs
@@ -143,6 +143,19 @@ public static void ToString_Invoke_ReturnsExpected(IPEndPoint endPoint, string e
Assert.Equal(expected, endPoint.ToString());
}
+ [Fact]
+ public static void Create_DifferentAF_Success()
+ {
+ SocketAddress sa = new SocketAddress(AddressFamily.InterNetwork, SocketAddress.GetMaximumAddressSize(AddressFamily.InterNetworkV6));
+ var ep = new IPEndPoint(IPAddress.IPv6Any, 0);
+ Assert.NotNull(ep.Create(sa));
+
+ sa = new SocketAddress(AddressFamily.InterNetworkV6);
+ ep = new IPEndPoint(IPAddress.Any, 0);
+
+ Assert.NotNull(ep.Create(sa));
+ }
+
public static IEnumerable