public static void Select(IList checkRead, IList checkWrite, IList checkError, int microSeconds)
{
// Validate input parameters.
if ((checkRead == null || checkRead.Count == 0) && (checkWrite == null || checkWrite.Count == 0) && (checkError == null || checkError.Count == 0))
{
throw new ArgumentNullException(null, SR.net_sockets_empty_select);
}
const int MaxSelect = 65536;
if (checkRead != null && checkRead.Count > MaxSelect)
{
throw new ArgumentOutOfRangeException(nameof(checkRead), SR.Format(SR.net_sockets_toolarge_select, nameof(checkRead), MaxSelect.ToString(NumberFormatInfo.CurrentInfo)));
}
if (checkWrite != null && checkWrite.Count > MaxSelect)
{
throw new ArgumentOutOfRangeException(nameof(checkWrite), SR.Format(SR.net_sockets_toolarge_select, nameof(checkWrite), MaxSelect.ToString(NumberFormatInfo.CurrentInfo)));
}
if (checkError != null && checkError.Count > MaxSelect)
{
throw new ArgumentOutOfRangeException(nameof(checkError), SR.Format(SR.net_sockets_toolarge_select, nameof(checkError), MaxSelect.ToString(NumberFormatInfo.CurrentInfo)));
}
SocketError errorCode = SocketPal.Select(checkRead, checkWrite, checkError, microSeconds);
// Throw an appropriate SocketException if the native call fails.
if (errorCode != SocketError.Success)
{
throw new SocketException((int)errorCode);
}
}