Socket.AcceptAsync(SocketAsyncEventArgs) 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.
Commence une opération asynchrone pour accepter une tentative de connexion entrante.
public:
bool AcceptAsync(System::Net::Sockets::SocketAsyncEventArgs ^ e);
public bool AcceptAsync(System.Net.Sockets.SocketAsyncEventArgs e);
member this.AcceptAsync : System.Net.Sockets.SocketAsyncEventArgs -> bool
Public Function AcceptAsync (e As SocketAsyncEventArgs) As Boolean
Paramètres
Objet SocketAsyncEventArgs à utiliser pour cette opération de socket asynchrone.
Retours
true si l’opération d’E/S est en attente. L’événement Completed sur le e paramètre est déclenché à l’achèvement de l’opération.
false si l’opération d’E/S s’est terminée de façon synchrone. L’événement Completed sur le e paramètre ne sera pas déclenché et l’objet e transmis en tant que 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.
Exceptions
Un argument n’est pas valide. Cette exception se produit si la mémoire tampon fournie n’est pas suffisamment grande. La mémoire tampon doit être d’au moins 2 * (sizeof(SOCKADDR_STORAGE + 16)) octets.
Cette exception se produit également si plusieurs mémoires tampons sont spécifiées, la BufferList propriété n’est pas null.
Un argument est hors limites. L’exception se produit si la Count valeur est inférieure à 0.
Une opération non valide a été demandée. Cette exception se produit si l’acceptation Socket n’écoute pas les connexions ou si le socket accepté est lié.
Vous devez appeler la méthode et Bind(EndPoint) la Listen(Int32) méthode avant d’appeler la AcceptAsync(SocketAsyncEventArgs) méthode.
Cette exception se produit également si le socket est déjà connecté ou si une opération de socket a déjà été en cours à l’aide du paramètre spécifié e .
Une erreur s’est produite lors de la tentative d’accès au socket.
Il Socket a été fermé.
Remarques
Les protocoles orientés connexion peuvent utiliser la AcceptAsync méthode pour traiter de manière asynchrone les tentatives de connexion entrantes. L’acceptation asynchrone des connexions vous donne la possibilité d’envoyer et de recevoir des données au sein d’un thread d’exécution distinct. Avant d’appeler la AcceptAsync méthode, vous devez appeler la Listen méthode pour écouter et mettre en file d’attente les demandes de connexion entrantes.
Pour être averti de l’achèvement, vous devez créer une méthode de rappel qui implémente le délégué EventHandler<SocketAsyncEventArgs> et le raccorder à l’événement SocketAsyncEventArgs.Completed .
Les propriétés et événements suivants sur l’objet System.Net.Sockets.SocketAsyncEventArgs sont obligatoires :
L’appelant peut éventuellement spécifier un élément existant Socket à utiliser pour la connexion entrante en spécifiant l’utilisation Socket avec la SocketAsyncEventArgs.AcceptSocket propriété.
Si la propriété a la SocketAsyncEventArgs.AcceptSocket valeur Null, un nouveau Socket est construit avec le même AddressFamily, SocketTypeet ProtocolType en tant que la propriété actuelle Socket et définie comme SocketAsyncEventArgs.AcceptSocket propriété.
L’appelant peut définir la SocketAsyncEventArgs.UserToken propriété sur n’importe quel objet d’état utilisateur souhaité avant d’appeler la 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.
Si vous le souhaitez, une mémoire tampon peut être fournie pour recevoir le bloc initial de données sur le socket une fois la ConnectAsync méthode réussie. Dans ce cas, la SocketAsyncEventArgs.Buffer propriété doit être définie sur la mémoire tampon contenant les données à recevoir et la SocketAsyncEventArgs.Count propriété doit être définie sur 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. Une partie de la mémoire tampon passée sera consommée en interne pour une utilisation par l’appel Winsock AcceptEx sous-jacent. Cela signifie que la quantité de données retournées est toujours inférieure à la valeur de la SocketAsyncEventArgs.Count propriété sur l’instance System.Net.Sockets.SocketAsyncEventArgs fournie. La quantité de mémoire tampon utilisée en interne varie en fonction de la famille d’adresses du socket. La taille minimale de la mémoire tampon requise est de 288 octets. Si une plus grande taille de mémoire tampon est spécifiée, les Socket données supplémentaires sont attendues autres que les données d’adresse reçues par l’appel Winsock AcceptEx et attendent que ces données supplémentaires aient été reçues. Si un délai d’expiration se produit, la connexion est réinitialisée. Par conséquent, si des données supplémentaires sont attendues d’une quantité spécifique, la taille de la mémoire tampon doit être définie sur la taille minimale de la mémoire tampon plus cette quantité.
La méthode de rappel d’achèvement doit examiner la SocketAsyncEventArgs.SocketError propriété pour déterminer si l’opération AcceptAsync a réussi.
L’événement SocketAsyncEventArgs.Completed peut se produire dans certains cas lorsqu’aucune connexion n’a été acceptée et que la SocketAsyncEventArgs.SocketError propriété doit être définie ConnectionResetsur . Cela peut se produire suite à l’analyse de port à l’aide d’une analyse de type SYN demi-ouverte (une séquence SYN -> SYN-ACK -> RST). Les applications utilisant la AcceptAsync méthode doivent être prêtes à gérer cette condition.