private ushort BindToNextAvail(Socket sock, params ushort[] portList)
{
foreach (ushort i in portList)
{
try
{
sock.Bind(new IPEndPoint(IPAddress.Any, i));
return (ushort)((IPEndPoint)sock.LocalEndPoint).Port;
}
catch
{
Logger.Instance().WriteLog(EventLogEntryType.Warning, "Unable to use port " + i.ToString());
}
}
return 0;
}
Это из моего живого приложения, поэтому оно должно работать приблизительно для вас.
И пример, где метод вызывается:
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
socket.ReceiveTimeout = 1000;
if (Bind(socket, 10000, 10001, 10002) == 0)
throw new SocketException(10049); // "Cannot assign requested address" exception