- New wrapper to handle tcp socket connection. - Fix some memory leak. Signed-off-by: noisyfox <timemanager.rick@gmail.com>
73 lines
1.6 KiB
C#
73 lines
1.6 KiB
C#
using System;
|
|
using System.Net;
|
|
using System.Net.Sockets;
|
|
|
|
namespace Shadowsocks.Util.Sockets
|
|
{
|
|
public static class SocketUtil
|
|
{
|
|
private class DnsEndPoint2 : DnsEndPoint
|
|
{
|
|
public DnsEndPoint2(string host, int port) : base(host, port)
|
|
{
|
|
}
|
|
|
|
public DnsEndPoint2(string host, int port, AddressFamily addressFamily) : base(host, port, addressFamily)
|
|
{
|
|
}
|
|
|
|
public override string ToString()
|
|
{
|
|
return this.Host + ":" + this.Port;
|
|
}
|
|
}
|
|
|
|
public static EndPoint GetEndPoint(string host, int port)
|
|
{
|
|
IPAddress ipAddress;
|
|
bool parsed = IPAddress.TryParse(host, out ipAddress);
|
|
if (parsed)
|
|
{
|
|
return new IPEndPoint(ipAddress, port);
|
|
}
|
|
|
|
// maybe is a domain name
|
|
return new DnsEndPoint2(host, port);
|
|
}
|
|
|
|
|
|
public static void FullClose(this System.Net.Sockets.Socket s)
|
|
{
|
|
try
|
|
{
|
|
s.Shutdown(SocketShutdown.Both);
|
|
}
|
|
catch (Exception)
|
|
{
|
|
}
|
|
try
|
|
{
|
|
s.Disconnect(false);
|
|
}
|
|
catch (Exception)
|
|
{
|
|
}
|
|
try
|
|
{
|
|
s.Close();
|
|
}
|
|
catch (Exception)
|
|
{
|
|
}
|
|
try
|
|
{
|
|
s.Dispose();
|
|
}
|
|
catch (Exception)
|
|
{
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|