Socket.Select Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Überlädt
| Name | Beschreibung |
|---|---|
| Select(IList, IList, IList, TimeSpan) |
Bestimmt den Status eines oder mehrerer Sockets. |
| Select(IList, IList, IList, Int32) |
Bestimmt den Status eines oder mehrerer Sockets. |
Select(IList, IList, IList, TimeSpan)
- Quelle:
- Socket.cs
- Quelle:
- Socket.cs
- Quelle:
- Socket.cs
- Quelle:
- Socket.cs
- Quelle:
- Socket.cs
Bestimmt den Status eines oder mehrerer Sockets.
public:
static void Select(System::Collections::IList ^ checkRead, System::Collections::IList ^ checkWrite, System::Collections::IList ^ checkError, TimeSpan timeout);
public static void Select(System.Collections.IList? checkRead, System.Collections.IList? checkWrite, System.Collections.IList? checkError, TimeSpan timeout);
static member Select : System.Collections.IList * System.Collections.IList * System.Collections.IList * TimeSpan -> unit
Public Shared Sub Select (checkRead As IList, checkWrite As IList, checkError As IList, timeout As TimeSpan)
Parameter
- timeout
- TimeSpan
Der Timeoutwert. Ein Wert, der -1 Mikrosekunden entspricht, gibt einen unendlichen Timeout an.
Ausnahmen
Die Parameter und , und die checkReadParameter sind alle null oder checkError leer. checkWrite Mindestens eine von checkRead, checkWriteoder checkError muss mindestens eine Socketenthalten .
Der checkRead, checkWriteoder checkError Parameter enthält zu viele Sockets.
Dies timeout war weniger als -1 Mikrosekunden oder größer als MaxValue Mikrosekunden.
Beim Versuch, auf den Socket zuzugreifen, ist ein Fehler aufgetreten.
Mindestens ein Socket wurde verworfen.
Gilt für:
Select(IList, IList, IList, Int32)
- Quelle:
- Socket.cs
- Quelle:
- Socket.cs
- Quelle:
- Socket.cs
- Quelle:
- Socket.cs
- Quelle:
- Socket.cs
Bestimmt den Status eines oder mehrerer 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);
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)
Parameter
- microSeconds
- Int32
Der Timeoutwert in Mikrosekunden. Ein -1 Wert gibt einen unendlichen Timeout an.
Ausnahmen
Die Parameter und , und die checkReadParameter sind alle null oder checkError leer. checkWrite Mindestens eine von checkRead, checkWriteoder checkError muss mindestens eine Socketenthalten .
Beim Versuch, auf den Socket zuzugreifen, ist ein Fehler aufgetreten.
.NET 5 und höher: Mindestens ein Socket wird verworfen.
Der checkRead, checkWriteoder checkError Parameter enthält zu viele Sockets.
Beispiele
Im folgenden Codebeispiel wird Select ermittelt, welche Überwachungssockets über eine Verbindungsanforderung verfügen.
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
Hinweise
Select ist eine statische Methode, die den Status einer oder mehrerer Socket Instanzen bestimmt. Sie müssen einen oder mehrere Sockets in ein IList Socket setzen, bevor Sie die Select Methode verwenden können. Überprüfen Sie die Lesbarkeit, indem Sie den IList Parameter als checkRead Parameter aufrufenSelect. Verwenden Sie den checkWrite Parameter, um die Sockets auf Schreibbarkeit zu überprüfen. Verwenden Sie checkErrorzum Erkennen von Fehlerbedingungen . Nach dem Aufrufen Selectwird dies IList nur mit den Sockets gefüllt, die die Bedingungen erfüllen.
Wenn Sie sich in einem Überwachungszustand befinden, bedeutet die Lesbarkeit, dass ein Aufruf Accept erfolgreich ist, ohne zu blockieren. Wenn Sie die Verbindung bereits akzeptiert haben, bedeutet die Lesbarkeit, dass Daten zum Lesen verfügbar sind. In diesen Fällen werden alle Empfangsvorgänge ohne Blockierung erfolgreich ausgeführt. Die Lesbarkeit kann auch angeben, ob die Remoteverbindung Socket beendet wurde. In diesem Fall wird ein Aufruf Receive sofort zurückgegeben, wobei null Bytes zurückgegeben werden.
Select gibt zurück, wenn mindestens einer der interessanten Sockets (die Sockets in den checkRead, checkWriteund checkError Listen) die angegebenen Kriterien erfüllt, oder der microSeconds Parameter wird überschritten, je nachdem, was zuerst kommt. Die Einstellung microSeconds auf -1 gibt ein unendliches Timeout an.
Wenn Sie einen Nichtblockierungsaufruf durchführen Connect, bedeutet die Schreibbarkeit, dass Sie erfolgreich eine Verbindung hergestellt haben. Wenn Sie bereits eine Verbindung hergestellt haben, bedeutet die Schreibbarkeit, dass alle Sendevorgänge ohne Blockierung erfolgreich ausgeführt werden.
Wenn Sie einen nicht blockierenden Aufruf Connectausgeführt haben, identifiziert der checkerror Parameter Sockets, die nicht erfolgreich verbunden wurden.
Anmerkung
Verwenden Sie die Poll Methode, wenn Sie nur den Status eines einzelnen SocketWerts ermitteln möchten.
Anmerkung
Diese Methode kann bestimmte Arten von Verbindungsproblemen nicht erkennen, z. B. ein fehlerhaftes Netzwerkkabel oder dass der Remotehost unauffällig heruntergefahren wurde. Sie müssen versuchen, Daten zu senden oder zu empfangen, um diese Arten von Fehlern zu erkennen.
Anmerkung
Wenn Sie ein SocketExceptionObjekt erhalten, verwenden Sie die SocketException.ErrorCode Eigenschaft, um den spezifischen Fehlercode abzurufen. Nachdem Sie diesen Code erhalten haben, finden Sie in der Windows Sockets Version 2-API-Fehlercodedokumentation eine detaillierte Beschreibung des Fehlers.