Skip to content

Commit a93cd19

Browse files
committed
Workaround for PlatformNotSupportedException
* Address https://github.com/dotnet/corefx/issues/26840
1 parent 9f69556 commit a93cd19

File tree

3 files changed

+17
-6
lines changed

3 files changed

+17
-6
lines changed

Enyim.Caching/Configuration/MemcachedClientConfiguration.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public MemcachedClientConfiguration(
4747
Servers = new List<DnsEndPoint>();
4848
foreach (var server in options.Servers)
4949
{
50-
Servers.Add(new DnsEndPoint(server.Address, server.Port));
50+
Servers.Add(new DnsEndPoint(server.Address, server.Port));
5151
}
5252

5353
SocketPool = new SocketPoolConfiguration();

Enyim.Caching/Memcached/MemcachedNode.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,7 @@ public class MemcachedNode : IMemcachedNode
3535
public MemcachedNode(
3636
DnsEndPoint endpoint,
3737
ISocketPoolConfiguration socketPoolConfig,
38-
ILogger logger
39-
)
38+
ILogger logger)
4039
{
4140
this.endPoint = endpoint;
4241
this.config = socketPoolConfig;

Enyim.Caching/Memcached/PooledSocket.cs

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,7 @@ public PooledSocket(DnsEndPoint endpoint, TimeSpan connectionTimeout, TimeSpan r
4646
: (int)receiveTimeout.TotalMilliseconds;
4747

4848
socket.ReceiveTimeout = rcv;
49-
socket.SendTimeout = rcv;
50-
socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true);
49+
socket.SendTimeout = rcv;
5150

5251
ConnectWithTimeout(socket, endpoint, timeout);
5352

@@ -59,8 +58,21 @@ public PooledSocket(DnsEndPoint endpoint, TimeSpan connectionTimeout, TimeSpan r
5958

6059
private void ConnectWithTimeout(Socket socket, DnsEndPoint endpoint, int timeout)
6160
{
61+
socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true);
6262
var args = new SocketAsyncEventArgs();
63-
args.RemoteEndPoint = endpoint;
63+
64+
//Workaround for https://github.com/dotnet/corefx/issues/26840
65+
if (!IPAddress.TryParse(endpoint.Host, out var address))
66+
{
67+
address = Dns.GetHostAddresses(endpoint.Host).FirstOrDefault(ip => ip.AddressFamily == AddressFamily.InterNetwork);
68+
if (address == null)
69+
throw new ArgumentException(String.Format("Could not resolve host '{0}'.", endpoint.Host));
70+
args.RemoteEndPoint = new IPEndPoint(address, endpoint.Port);
71+
}
72+
else
73+
{
74+
args.RemoteEndPoint = endpoint;
75+
}
6476

6577
using (var mres = new ManualResetEventSlim())
6678
{

0 commit comments

Comments
 (0)