Socket.Select Méthode

Définition

Surcharges

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

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

IList sur Socket instances à vérifier en ce qui concerne la lisibilité.

checkWrite
IList

IList sur Socket instances à vérifier en ce qui concerne la capacité d’écriture.

checkError
IList

IList sur Socket instances à vérifier en ce qui concerne les erreurs.

timeout
TimeSpan

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

Exceptions

Le checkReadparamètre , checkWriteou checkError est null ou vide.

Le checkReadparamètre , checkWriteou checkError contient trop de sockets.

A timeout été inférieur à -1 microsecondes ou supérieur à MaxValue microsecondes

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

Une ou plusieurs douilles ont été supprimées.

S’applique à

Select(IList, IList, IList, Int32)

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

IList sur Socket instances à vérifier en ce qui concerne la lisibilité.

checkWrite
IList

IList sur Socket instances à vérifier en ce qui concerne la capacité d’écriture.

checkError
IList

IList sur Socket instances à vérifier en ce qui concerne les erreurs.

microSeconds
Int32

La valeur du délai d’expiration exprimée en microsecondes. Une valeur de -1 indique un délai d’attente infini.

Exceptions

Le paramètre checkRead a la valeur null ou est vide.

-et-

Le paramètre checkWrite a la valeur null ou est vide.

-et-

Le paramètre checkError a la valeur null ou est vide.

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

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

Le checkReadparamètre , checkWriteou checkError 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^ lipa = Dns::Resolve( Dns::GetHostName() );
      
      //Gets three separate local endpoints.
      IPEndPoint^ lep1 = gcnew IPEndPoint( lipa->AddressList[ 0 ],11000 );
      IPEndPoint^ lep2 = gcnew IPEndPoint( lipa->AddressList[ 0 ],11001 );
      IPEndPoint^ lep3 = gcnew IPEndPoint( lipa->AddressList[ 0 ],11002 );
      
      //creates an array of endpoints.
      array<IPEndPoint^>^ipendpoints = gcnew array<IPEndPoint^>(3);
      ipendpoints[ 0 ] = lep1;
      ipendpoints[ 1 ] = lep2;
      ipendpoints[ 2 ] = lep3;
      
      //Creates three separate sockets.
      Socket^ s1 = gcnew Socket( lep1->Address->AddressFamily,SocketType::Stream,ProtocolType::Tcp );
      Socket^ s2 = gcnew Socket( lep2->Address->AddressFamily,SocketType::Stream,ProtocolType::Tcp );
      Socket^ s3 = gcnew Socket( lep3->Address->AddressFamily,SocketType::Stream,ProtocolType::Tcp );
      array<Socket^>^socketList = gcnew array<Socket^>(3);
      socketList[ 0 ] = s1;
      socketList[ 1 ] = s2;
      socketList[ 2 ] = s3;
      
      //Binds and Listens on all sockets in the array of sockets.
      for ( int i = 0; i < 3; i++ )
      {
         socketList[ i ]->Bind( ipendpoints[ i ] );
         socketList[ i ]->Listen( 1000 );

      }
      
      //Calls Select to determine which sockets are ready for reading.
      Socket::Select( safe_cast<IList^>(socketList), nullptr, nullptr, 1000 );
      
      //Reads on the sockets returned by Select.
      array<Byte>^buffer = gcnew array<Byte>(1024);
      String^ outString;
      for ( Int32 j = 0; j < (socketList->Length - 1); j++ )
      {
         socketList[ j ]->Receive( buffer );
         outString =  "Socket ";
         outString->Concat( j.ToString(),  " has the message", Encoding::ASCII->GetString( buffer ) );
         Console::WriteLine( outString );

      }
   }

};

int main()
{
   return 0;
}
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

Selectest une méthode statique qui détermine la status d’une ou plusieurs Socket instances. Vous devez placer un ou plusieurs sockets dans un avant de IList pouvoir utiliser la Select méthode . Vérifiez la lisibilité en appelant Select avec comme IListcheckRead paramètre . Pour case activée vos sockets à des fins d’écriture, utilisez le checkWrite paramètre . Pour détecter les conditions d’erreur, utilisez checkError. Après avoir appelé Select, le IList est rempli uniquement avec les sockets qui remplissent les conditions.

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

Select retourne quand au moins l’un des sockets d’intérêt (les sockets dans les checkReadlistes , checkWriteet checkError ) répond à ses critères spécifiés, ou lorsque le microSeconds paramètre est dépassé, selon la première éventualité. La définition microSeconds de la valeur -1 spécifie un délai d’attente infini.

Si vous effectuez un appel non bloquant à Connect, la facilité d’écriture signifie que vous vous êtes connecté avec succès. Si vous avez déjà une connexion établie, la facilité d’écriture signifie que toutes les opérations d’envoi réussissent sans blocage.

Si vous avez effectué un appel non bloquant à Connect, le checkerror paramètre identifie les sockets qui ne se sont pas connectés correctement.

Notes

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

Notes

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 non appropriée. Vous devez tenter d’envoyer ou de recevoir des données pour détecter ces types d’erreurs.

Notes

Si vous recevez un SocketException, utilisez la SocketException.ErrorCode propriété pour obtenir le code d’erreur spécifique. Une fois ce code obtenu, 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 à