Socket.AcceptAsync(SocketAsyncEventArgs) Methode

Definitie

Hiermee wordt een asynchrone bewerking gestart om een binnenkomende verbindingspoging te accepteren.

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

Parameters

e
SocketAsyncEventArgs

Het SocketAsyncEventArgs object dat moet worden gebruikt voor deze asynchrone socketbewerking.

Retouren

true als de I/O-bewerking in behandeling is. De Completed gebeurtenis voor de e parameter wordt gegenereerd na voltooiing van de bewerking.

false als de I/O-bewerking synchroon is voltooid. De Completed gebeurtenis voor de e parameter wordt niet gegenereerd en het e object dat als parameter wordt doorgegeven, kan onmiddellijk worden onderzocht nadat de methodeaanroep terugkeert om het resultaat van de bewerking op te halen.

Uitzonderingen

Een argument is ongeldig. Deze uitzondering treedt op als de opgegeven buffer niet groot genoeg is. De buffer moet ten minste 2 * (groottevan(SOCKADDR_STORAGE + 16)) bytes zijn.

Deze uitzondering treedt ook op als er meerdere buffers zijn opgegeven, de BufferList eigenschap niet null is.

Een argument valt buiten het bereik. De uitzondering treedt op als de Count waarde kleiner is dan 0.

Er is een ongeldige bewerking aangevraagd. Deze uitzondering treedt op als het accepteren Socket niet luistert naar verbindingen of als de geaccepteerde socket is gebonden.

U moet de Bind(EndPoint) en Listen(Int32) methode aanroepen voordat u de AcceptAsync(SocketAsyncEventArgs) methode aanroept.

Deze uitzondering treedt ook op als de socket al is verbonden of als er al een socketbewerking wordt uitgevoerd met behulp van de opgegeven e parameter.

Er is een fout opgetreden bij het openen van de socket.

Opmerkingen

Verbindingsgeoriënteerde protocollen kunnen de AcceptAsync methode gebruiken om binnenkomende verbindingspogingen asynchroon te verwerken. Als u verbindingen asynchroon accepteert, kunt u gegevens verzenden en ontvangen binnen een afzonderlijke uitvoeringsthread. Voordat u de AcceptAsync methode aanroept, moet u de Listen methode aanroepen om te luisteren naar binnenkomende verbindingsaanvragen en deze in de wachtrij te plaatsen.

Als u op de hoogte wilt worden gesteld van voltooiing, moet u een callback-methode maken waarmee de gemachtigde EventHandler<SocketAsyncEventArgs> wordt geïmplementeerd en aan de SocketAsyncEventArgs.Completed gebeurtenis wordt gekoppeld.

De volgende eigenschappen en gebeurtenissen op het System.Net.Sockets.SocketAsyncEventArgs object zijn vereist:

De beller kan desgewenst een bestaande Socket opgeven die moet worden gebruikt voor de binnenkomende verbinding door de Socket te gebruiken eigenschap SocketAsyncEventArgs.AcceptSocket op te geven.

Als de SocketAsyncEventArgs.AcceptSocket eigenschap null is, wordt er een nieuwe Socket gemaakt met dezelfde AddressFamily, SocketTypeen ProtocolType als de huidige Socket en ingesteld als de SocketAsyncEventArgs.AcceptSocket eigenschap.

De aanroeper kan de SocketAsyncEventArgs.UserToken eigenschap instellen op een gewenst gebruikersstatusobject voordat de AcceptAsync methode wordt aangeroepen, zodat de gegevens kunnen worden opgehaald in de callback-methode. Als de callback meer informatie nodig heeft dan één object, kan er een kleine klasse worden gemaakt om de andere vereiste statusgegevens als leden te bewaren.

Desgewenst kan er een buffer worden opgegeven waarin het eerste gegevensblok op de socket kan worden ontvangen nadat de ConnectAsync methode is geslaagd. In dit geval moet de SocketAsyncEventArgs.Buffer eigenschap worden ingesteld op de buffer met de gegevens die moeten worden ontvangen en moet de SocketAsyncEventArgs.Count eigenschap worden ingesteld op het maximum aantal bytes aan gegevens dat in de buffer moet worden ontvangen. Deze eigenschappen kunnen worden ingesteld met behulp van de SocketAsyncEventArgs.SetBuffer methode. Een deel van de doorgegeven buffer wordt intern gebruikt voor gebruik door de onderliggende Winsock AcceptEx-aanroep. Dit betekent dat de hoeveelheid geretourneerde gegevens altijd kleiner is dan de waarde van de SocketAsyncEventArgs.Count eigenschap op het System.Net.Sockets.SocketAsyncEventArgs opgegeven exemplaar. De hoeveelheid buffer die intern wordt gebruikt, varieert op basis van de adresfamilie van de socket. De minimale buffergrootte is 288 bytes. Als er een grotere buffergrootte is opgegeven, Socket worden er andere extra gegevens verwacht dan de adresgegevens die zijn ontvangen door de Winsock AcceptEx-aanroep en wordt gewacht totdat deze extra gegevens zijn ontvangen. Als er een time-out optreedt, wordt de verbinding opnieuw ingesteld. Dus als er extra gegevens van een bepaald bedrag worden verwacht, moet de buffergrootte worden ingesteld op de minimale buffergrootte plus dit bedrag.

De callback-methode voor voltooiing moet de SocketAsyncEventArgs.SocketError eigenschap onderzoeken om te bepalen of de AcceptAsync bewerking is geslaagd.

De SocketAsyncEventArgs.Completed gebeurtenis kan zich voordoen in sommige gevallen wanneer er geen verbinding is geaccepteerd en de SocketAsyncEventArgs.SocketError eigenschap moet worden ingesteld op ConnectionReset. Dit kan gebeuren als gevolg van poortscans met behulp van een halfopen SYN-typescan (een SYN -> SYN-ACK -> RST-reeks). Toepassingen die de AcceptAsync methode gebruiken, moeten worden voorbereid om deze voorwaarde te verwerken.

Van toepassing op

Zie ook