Partager via


Socket.Select Méthode

Définition

Surcharges

Nom Description
Select(IList, IList, IList, TimeSpan)

Détermine l’état d’un ou plusieurs sockets.

Select(IList, IList, IList, Int32)

Détermine l’état d’un ou plusieurs sockets.

Select(IList, IList, IList, TimeSpan)

Source:
Socket.cs
Source:
Socket.cs
Source:
Socket.cs
Source:
Socket.cs
Source:
Socket.cs

Détermine l’état d’un ou plusieurs 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)

Paramètres

checkRead
IList

Instances IList permettant de Socket vérifier la lisibilité.

checkWrite
IList

Socket Instances IList à vérifier la facilité d’écriture.

checkError
IList

Instances IList permettant de Socket vérifier les erreurs.

timeout
TimeSpan

Valeur du délai d’expiration. Une valeur égale à -1 microsecondes indique un délai d’expiration infini.

Exceptions

Les checkReadparamètres et checkError les paramètres checkWritesont tous null ou vides. Au moins un de checkRead, checkWriteou checkError doit contenir au moins un Socket.

Le checkRead, checkWriteou checkError le paramètre contient trop de sockets.

La timeout valeur était inférieure à -1 microsecondes ou supérieure MaxValue à la microseconde

Une erreur s’est produite lors de la tentative d’accès au socket.

Un ou plusieurs sockets ont été supprimés.

S’applique à

Select(IList, IList, IList, Int32)

Source:
Socket.cs
Source:
Socket.cs
Source:
Socket.cs
Source:
Socket.cs
Source:
Socket.cs

Détermine l’état d’un ou plusieurs 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)

Paramètres

checkRead
IList

Instances IList permettant de Socket vérifier la lisibilité.

checkWrite
IList

Socket Instances IList à vérifier la facilité d’écriture.

checkError
IList

Instances IList permettant de Socket vérifier les erreurs.

microSeconds
Int32

Valeur de délai d’attente, en microsecondes. Une valeur -1 indique un délai d’attente infini.

Exceptions

Les checkReadparamètres et checkError les paramètres checkWritesont tous null ou vides. Au moins un de checkRead, checkWriteou checkError doit contenir au moins un Socket.

Une erreur s’est produite lors de la tentative d’accès au socket.

.NET 5 et versions ultérieures : un ou plusieurs sockets sont supprimés.

Le checkRead, checkWriteou checkError le paramètre contient trop de sockets.

Exemples

L’exemple de code suivant utilise Select pour déterminer quels sockets d’écoute ont une demande de connexion.

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

Remarques

Select est une méthode statique qui détermine l’état d’une ou plusieurs Socket instances. Vous devez placer un ou plusieurs sockets dans un IList serveur avant de pouvoir utiliser la Select méthode. Vérifiez la lisibilité en appelant Select le IList paramètre en tant que checkRead paramètre. Pour vérifier la facilité d’écriture de vos sockets, utilisez le checkWrite paramètre. Pour détecter les conditions d’erreur, utilisez checkError. Après l’appel Select, le IList sera rempli uniquement avec les sockets qui répondent aux conditions.

Si vous êtes dans un état d’écoute, la lisibilité signifie qu’un appel Accept réussira sans bloquer. Si vous avez déjà accepté la connexion, la lisibilité signifie que les données sont disponibles pour la lecture. Dans ces cas, toutes les opérations de réception réussissent sans bloquer. La lisibilité peut également indiquer si l’ordinateur distant Socket a arrêté la connexion ; dans ce cas, un appel à Receive retourner immédiatement, avec zéro octet retourné.

Select retourne quand au moins un des sockets d’intérêt (les sockets dans le checkRead, checkWriteet checkError les listes) répondent à ses critères spécifiés, ou que le microSeconds paramètre est dépassé, selon le premier. La définition microSeconds de -1 spécifie un délai d’attente infini.

Si vous effectuez un appel non bloquant à Connect, la facilité d’écriture signifie que vous avez correctement connecté. Si vous disposez déjà d’une connexion établie, la facilité d’écriture signifie que toutes les opérations d’envoi réussissent sans bloquer.

Si vous avez effectué un appel non bloquant, Connectle checkerror paramètre identifie les sockets qui n’ont pas été connectés correctement.

Note

Utilisez la Poll méthode si vous souhaitez uniquement déterminer l’état d’un seul Socket.

Note

Cette méthode ne peut pas détecter certains types de problèmes de connexion, tels qu’un câble réseau défectueux, ou que l’hôte distant a été arrêté de manière incorrecte. Vous devez tenter d’envoyer ou de recevoir des données pour détecter ces types d’erreurs.

Note

Si vous recevez un SocketException, utilisez la SocketException.ErrorCode propriété pour obtenir le code d’erreur spécifique. Une fois que vous avez obtenu ce code, reportez-vous à la documentation du code d’erreur de l’API Windows Sockets version 2 pour obtenir une description détaillée de l’erreur.

Voir aussi

S’applique à