Socket.Select Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
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
- timeout
- TimeSpan
Valeur du délai d'attente. Une valeur égale à -1 microsecondes indique un délai d’expiration infini.
Exceptions
Le checkRead
paramètre , checkWrite
ou checkError
est null
ou vide.
Le checkRead
paramètre , checkWrite
ou 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
- 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 checkRead
paramètre , checkWrite
ou 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 checkRead
listes , checkWrite
et 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
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 à
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de l’année 2024, nous abandonnerons progressivement le mécanisme de retour d’information GitHub Issues pour le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultez :Soumettre et afficher des commentaires pour