mirror of
https://github.com/Alex-Rachel/TEngine.git
synced 2025-08-14 16:51:28 +00:00
54 lines
1.5 KiB
C#
54 lines
1.5 KiB
C#
using System.Net;
|
|
using System.Net.Sockets;
|
|
|
|
namespace TEngine
|
|
{
|
|
public class NetUtil
|
|
{
|
|
public static bool IsHaveIpV6Address(IPAddress[] ipAddresses, ref IPAddress[] outIPs)
|
|
{
|
|
int v6Count = 0;
|
|
for (int i = 0; i < ipAddresses.Length; i++)
|
|
{
|
|
if (AddressFamily.InterNetworkV6.Equals(ipAddresses[i].AddressFamily))
|
|
{
|
|
v6Count++;
|
|
}
|
|
}
|
|
|
|
if (v6Count > 0)
|
|
{
|
|
outIPs = new IPAddress[v6Count];
|
|
int resIndex = 0;
|
|
for (int i = 0; i < ipAddresses.Length; i++)
|
|
{
|
|
if (AddressFamily.InterNetworkV6.Equals(ipAddresses[i].AddressFamily))
|
|
{
|
|
outIPs[resIndex++] = ipAddresses[i];
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public static IPEndPoint GetEndPoint(string server, int port)
|
|
{
|
|
IPAddress[] ps = Dns.GetHostAddresses(server);
|
|
IPAddress[] finalIps = ps;
|
|
if (Socket.OSSupportsIPv6 && NetUtil.IsHaveIpV6Address(ps, ref finalIps))
|
|
{
|
|
Log.Error("socket use addr ipV6: {0}, IP count:{1} AddressFamily[{2}]", server, finalIps.Length, finalIps[0].AddressFamily);
|
|
}
|
|
|
|
if (finalIps.Length > 0)
|
|
{
|
|
return new IPEndPoint(finalIps[0], port);
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}
|
|
} |