Cet article a fait l’objet d’une traduction automatique. Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez également afficher le texte anglais dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte traduit.
Traduction
Anglais

Socket.AcceptAsync méthode (SocketAsyncEventArgs)

 

Date de publication : novembre 2016

Commence une opération asynchrone pour accepter une tentative de connexion entrante.

Espace de noms:   System.Net.Sockets
Assembly:  System (dans System.dll)

public bool AcceptAsync(
	SocketAsyncEventArgs e
)

Paramètres

e
Type: System.Net.Sockets.SocketAsyncEventArgs

Le System.Net.Sockets.SocketAsyncEventArgs objet à utiliser pour cette opération de socket asynchrone.

Valeur de retour

Type: System.Boolean

Retourne true Si l’opération d’e/s en attente. Le SocketAsyncEventArgs.Completed événement sur le e paramètre sera déclenché à la fin de l’opération.

Retourne false Si l’opération d’e/s effectuée de façon synchrone. Le SocketAsyncEventArgs.Completed événement sur le e paramètre n’est pas déclenché et le e objet passé comme un paramètre peut être examiné immédiatement après l’appel de méthode pour récupérer le résultat de l’opération.

Exception Condition
ArgumentException

Un argument n’est pas valide. Cette exception se produit si la mémoire tampon fournie n’est pas assez grande. La mémoire tampon doit être au moins 2 * (sizeof(SOCKADDR_STORAGE + 16) octets.

Cette exception se produit également si plusieurs mémoires tampons sont spécifiées, le SocketAsyncEventArgs.BufferList propriété n’est pas null.

ArgumentOutOfRangeException

Un argument est hors limites. L’exception se produit si la SocketAsyncEventArgs.Count est inférieur à 0.

InvalidOperationException

Une opération non valide a été demandée. Cette exception se produit si l’acceptation Socket n’écoute pas les connexions ou accepté socket est lié.

Vous devez appeler le Bind et Listen méthode avant d’appeler le AcceptAsync (méthode).

Cette exception se produit également si le socket est déjà connecté ou une opération de socket a été déjà en cours à l’aide de le e paramètre.

SocketException

Une erreur s’est produite pendant la tentative d’accès au socket. Pour plus d'informations, consultez la section Notes.

NotSupportedException

Windows XP ou version ultérieure est requis pour cette méthode.

ObjectDisposedException

Socket a été fermé.

Les protocoles orientés connexion peuvent utiliser la AcceptAsync tente de méthode pour traiter de manière asynchrone une connexion entrante. Acceptation des connexions de manière asynchrone vous donne la possibilité d’envoyer et recevoir les données dans un thread d’exécution séparé. Avant d’appeler le AcceptAsync (méthode), vous devez appeler la Listen méthode pour écouter et de file d’attente des demandes de connexion entrantes.

Pour être averti de fin, vous devez créer une méthode de rappel qui implémente le délégué EventHandler < SocketAsyncEventArgs > délégué et connecter à la SocketAsyncEventArgs.Completed événement.

Les propriétés et événements suivants sur le System.Net.Sockets.SocketAsyncEventArgs objet sont requises :

L’appelant peut éventuellement spécifier un existant Socket à utiliser pour la connexion entrante en spécifiant le Socket à utiliser avec le SocketAsyncEventArgs.AcceptSocket propriété.

Si le SocketAsyncEventArgs.AcceptSocket propriété est null, un nouveau Socket est construit avec les mêmes AddressFamily, SocketType, et ProtocolType en cours Socket et définissez le SocketAsyncEventArgs.AcceptSocket propriété.

L’appelant peut affecter le SocketAsyncEventArgs.UserToken propriété à n’importe quel objet d’état utilisateur désiré avant d’appeler le AcceptAsync (méthode), afin que les informations soient récupérables dans la méthode de rappel. Si le rappel a besoin de plus d’informations qu’un seul objet, une petite classe peut être créée pour contenir les autres informations d’état requises en tant que membres.

Une mémoire tampon peut éventuellement être fournie qui recevra le bloc initial de données sur le socket après le ConnectAsync méthode réussit. Dans ce cas, le SocketAsyncEventArgs.Buffer propriété doit être définie dans la mémoire tampon contenant les données à recevoir et le SocketAsyncEventArgs.Count propriété doit être définie pour le nombre maximal d’octets de données à recevoir dans la mémoire tampon. Ces propriétés peuvent être définies à l’aide de la SocketAsyncEventArgs.SetBuffer méthode. Partie de la mémoire tampon transmis sera consommée en interne pour une utilisation par le l’appel de Winsock AcceptEx sous-jacent. Cela signifie que la quantité de données retournées sera toujours inférieure à la valeur de la SocketAsyncEventArgs.Count propriété sur le System.Net.Sockets.SocketAsyncEventArgs fournie. La quantité de la mémoire tampon utilisée en interne varie en fonction de la famille d’adresses de socket. La taille de tampon minimale requise est 288 octets. Si une plus grande taille de mémoire tampon est spécifiée, le Socket attend des données supplémentaires autres que les données d’adresse reçues par l’appel de Winsock AcceptEx et attend jusqu'à ce que ces données supplémentaires sont reçues. Si un délai d’attente se produit, la connexion est rétablie. Donc si des données supplémentaires sont attendues d’un montant spécifique, la taille du tampon doit être définie à la taille de mémoire tampon minimum plus cette quantité.

La méthode de rappel d’exécution doit examiner le SocketAsyncEventArgs.SocketError propriété pour déterminer si le AcceptAsync opération a réussi.

Le SocketAsyncEventArgs.Completed événements peuvent se produire dans certains cas, lorsque aucune connexion n’a pas été acceptée et provoquer le SocketAsyncEventArgs.SocketError la définition propriété ConnectionReset. Cela peut se produire suite à l’analyse des ports à l’aide d’une analyse de type demi-ouvertes SYN (un SYN -> SYN-ACK-> séquence RST). Les applications à l’aide de la AcceptAsync méthode doit être prêtes à gérer cette condition.

Plateforme Windows universelle
Disponible depuis 10
.NET Framework
Disponible depuis 2.0
Silverlight pour Windows Phone
Disponible depuis 8.0
Retour au début
Afficher: