Socket.Select(IList, IList, IList, Int32) Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Bepaalt de status van een of meer sockets.
public:
static void Select(System::Collections::IList ^ checkRead, System::Collections::IList ^ checkWrite, System::Collections::IList ^ checkError, int microSeconds);
public static void Select(System.Collections.IList checkRead, System.Collections.IList checkWrite, System.Collections.IList checkError, int microSeconds);
static member Select : System.Collections.IList * System.Collections.IList * System.Collections.IList * int -> unit
Public Shared Sub Select (checkRead As IList, checkWrite As IList, checkError As IList, microSeconds As Integer)
Parameters
- checkWrite
- IList
Een IList van Socket de exemplaren die moeten worden gecontroleerd op schrijfbaarheid.
- microSeconds
- Int32
De time-outwaarde, in microseconden. Een -1-waarde geeft een oneindige time-out aan.
Uitzonderingen
De checkRead, checkWriteen checkError parameters zijn allemaal null of leeg. Ten minste één van checkRead, checkWriteof checkError moet ten minste één Socketbevatten .
Er is een fout opgetreden bij het openen van de socket.
.NET 5 en hoger: een of meer sockets worden verwijderd.
De checkReadparameter , checkWriteof checkError de parameter bevat te veel sockets.
Voorbeelden
In het volgende codevoorbeeld wordt gebruikt Select om te bepalen welke listening sockets een verbindingsaanvraag hebben.
IPHostEntry ipHostEntry = Dns.Resolve(Dns.GetHostName());
IPAddress ipAddress = ipHostEntry.AddressList[0];
Socket socket0 = null;
Socket socket1 = null;
Socket socket2 = null;
Socket socket3 = null;
Socket socket4 = null;
Socket socket5 = null;
ArrayList listenList = new ArrayList();
listenList.Add(socket0);
listenList.Add(socket1);
listenList.Add(socket2);
ArrayList acceptList = new ArrayList();
acceptList.Add(socket3);
acceptList.Add(socket4);
acceptList.Add(socket5);
for( int i = 0; i < 3; i++ )
{
listenList[i] = new Socket(AddressFamily.InterNetwork,
SocketType.Stream,
ProtocolType.Tcp);
((Socket)listenList[i]).Bind(new IPEndPoint(ipAddress, 11000 + i));
((Socket)listenList[i]).Listen(10);
}
// Only the sockets that contain a connection request
// will remain in listenList after Select returns.
Socket.Select(listenList, null, null, 1000);
for( int i = 0; i < listenList.Count; i++ )
{
acceptList[i] = ((Socket)listenList[i]).Accept();
}
Dim ipHostEntry As IPHostEntry = Dns.Resolve(Dns.GetHostName())
Dim ipAddress As IPAddress = ipHostEntry.AddressList(0)
Dim socket0 As Socket = Nothing
Dim socket1 As Socket = Nothing
Dim socket2 As Socket = Nothing
Dim socket3 As Socket = Nothing
Dim socket4 As Socket = Nothing
Dim socket5 As Socket = Nothing
Dim listenList As New ArrayList()
listenList.Add(socket0)
listenList.Add(socket1)
listenList.Add(socket2)
Dim acceptList As New ArrayList()
acceptList.Add(socket3)
acceptList.Add(socket4)
acceptList.Add(socket5)
Dim i As Integer
For i = 0 To 2
listenList(i) = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
CType(listenList(i), Socket).Bind(New IPEndPoint(ipAddress, 11000 + i))
CType(listenList(i), Socket).Listen(10)
Next i
'Only the sockets that contain a connection request
'will remain in listenList after Select returns.
Socket.Select(listenList, Nothing, Nothing, 1000)
For i = 0 To listenList.Count - 1
acceptList(i) = CType(listenList(i), Socket).Accept()
Next i
Opmerkingen
Select is een statische methode die de status van een of meer Socket exemplaren bepaalt. U moet een of meer sockets in een IList stopcontact plaatsen voordat u de Select methode kunt gebruiken. Controleer op leesbaarheid door aan te roepen Select met de IList parameter als de checkRead parameter. Gebruik de checkWrite parameter om uw sockets te controleren op schrijfbaarheid. Gebruik checkErrorvoor het detecteren van foutvoorwaarden. Na het aanroepen SelectIList worden alleen de sockets gevuld die aan de voorwaarden voldoen.
Als u een luisterstatus hebt, betekent de leesbaarheid dat een oproep om te Accept slagen zonder te blokkeren. Als u de verbinding al hebt geaccepteerd, betekent de leesbaarheid dat gegevens beschikbaar zijn voor lezen. In deze gevallen worden alle ontvangstbewerkingen zonder blokkering uitgevoerd. Leesbaarheid kan ook aangeven of de externe Socket verbinding heeft afgesloten. In dat geval wordt er onmiddellijk een aanroep geretourneerd Receive , waarbij nul bytes worden geretourneerd.
Select retourneert wanneer ten minste één van de sockets van belang (de sockets in de checkRead, checkWriteen checkError lijsten) voldoet aan de opgegeven criteria, of als de microSeconds parameter wordt overschreden, afhankelijk van wat het eerst voorkomt. Instelling microSeconds voor -1 geeft een oneindige time-out op.
Als u een niet-blokkerende aanroep maakt Connect, betekent schrijfbaarheid dat u verbinding hebt gemaakt. Als u al een verbinding tot stand hebt gebracht, betekent schrijfbaarheid dat alle verzendbewerkingen zonder blokkering slagen.
Als u een niet-blokkerende aanroep Connecthebt gedaan, identificeert de checkerror parameter sockets die niet zijn verbonden.
Note
Deze methode kan bepaalde soorten verbindingsproblemen, zoals een verbroken netwerkkabel, niet detecteren of dat de externe host geforceerd is afgesloten. U moet proberen om gegevens te verzenden of te ontvangen om dit soort fouten te detecteren.
Note
Als u een SocketExceptionontvangt, gebruikt u de SocketException.ErrorCode eigenschap om de specifieke foutcode te verkrijgen. Nadat u deze code hebt verkregen, raadpleegt u de Windows Sockets versie 2 API-foutcode documentatie voor een gedetailleerde beschrijving van de fout.