Files
TEngine/Assets/GameScripts/HotFix/GameLogic/Network/NetUtil.cs
ALEXTANG 91fff462cb [+] Network
[+] Network
2023-04-20 20:23:00 +08:00

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;
}
}
}