私は次の機能を持っています:
public static Socket ConnectSocket(string srvName, int srvPort)
{
Socket tempSocket = null;
IPHostEntry hostEntry = null;
try
{
hostEntry = Dns.GetHostEntry(srvName);
//// Loop through the AddressList to obtain the supported AddressFamily. This is to avoid
//// an exception that occurs when the host IP Address is not compatible with the address family
//// (typical in the IPv6 case).
foreach (IPAddress address in hostEntry.AddressList)
{
IPEndPoint ipe = new IPEndPoint(address, srvPort);
if (!ipe.AddressFamily.Equals(AddressFamily.InterNetwork))
continue;
tempSocket = new Socket(ipe.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
tempSocket.Connect(ipe);
if (tempSocket.Connected)
{
return tempSocket;
}
tempSocket.Close();
}
throw new ConnectionThruAddressFamilyFailedException();
}
finally
{
//I can't close socket here because I want to use it next
}
}
そして、ここでコード分析中にCA2000(スコープを失う前にオブジェクトを破棄する)警告が明らかにあります。返されたソケットは、次にサーバーとの通信に使用されます。なので、ここで処分することはできません。ここで後でこのオブジェクトを破棄しても、CA2000 があります。
これを解決するには?