Socket.AcceptAsync Metoda

Definice

Přetížení

AcceptAsync()

Přijímá příchozí připojení.

AcceptAsync(Socket)

Přijímá příchozí připojení.

AcceptAsync(SocketAsyncEventArgs)

Zahájí asynchronní operaci, která přijme příchozí pokus o připojení.

AcceptAsync(CancellationToken)

Přijímá příchozí připojení.

AcceptAsync(Socket, CancellationToken)

Přijímá příchozí připojení.

AcceptAsync()

Přijímá příchozí připojení.

public:
 System::Threading::Tasks::Task<System::Net::Sockets::Socket ^> ^ AcceptAsync();
public System.Threading.Tasks.Task<System.Net.Sockets.Socket> AcceptAsync ();
member this.AcceptAsync : unit -> System.Threading.Tasks.Task<System.Net.Sockets.Socket>
Public Function AcceptAsync () As Task(Of Socket)

Návraty

Asynchronní úloha, která se dokončí s akceptovaným soketem.

Výjimky

Byla požadována neplatná operace. K této výjimce dochází v případě, že akceptující Socket nenaslouchá připojení nebo je přijatý soket svázaný.

Před voláním metody musíte volat metodu Bind(EndPoint)AcceptAsync(SocketAsyncEventArgs) a Listen(Int32) .

K této výjimce dochází také v případě, že soket je již připojen nebo již probíhala operace soketu pomocí zadaného e parametru.

Při pokusu o přístup k soketu došlo k chybě.

Poznámky

Tato metoda ukládá do úlohy, která vrací všechny výjimky nesouvisejí s používáním, které může vyvolat synchronní protějšek metody. Pokud je ve vrácené úloze uložena výjimka, bude tato výjimka vyvolána při čekání na úkol. Výjimky použití, například ArgumentException, jsou stále vyvolány synchronně. Informace o uložených výjimkách najdete v tématu Výjimky vyvolané nástrojem Accept().

Platí pro

AcceptAsync(Socket)

Přijímá příchozí připojení.

public:
 System::Threading::Tasks::Task<System::Net::Sockets::Socket ^> ^ AcceptAsync(System::Net::Sockets::Socket ^ acceptSocket);
public System.Threading.Tasks.Task<System.Net.Sockets.Socket> AcceptAsync (System.Net.Sockets.Socket? acceptSocket);
member this.AcceptAsync : System.Net.Sockets.Socket -> System.Threading.Tasks.Task<System.Net.Sockets.Socket>
Public Function AcceptAsync (acceptSocket As Socket) As Task(Of Socket)

Parametry

acceptSocket
Socket

Soket, který se má použít pro přijetí připojení.

Návraty

Asynchronní úloha, která se dokončí s akceptovaným soketem.

Výjimky

Byla požadována neplatná operace. K této výjimce dochází v případě, že akceptující Socket nenaslouchá připojení nebo je přijatý soket svázaný.

Před voláním metody musíte volat metodu Bind(EndPoint)AcceptAsync(SocketAsyncEventArgs) a Listen(Int32) .

K této výjimce dochází také v případě, že soket je již připojen nebo již probíhala operace soketu pomocí zadaného e parametru.

Při pokusu o přístup k soketu došlo k chybě.

Platí pro

AcceptAsync(SocketAsyncEventArgs)

Zahájí asynchronní operaci, která přijme příchozí pokus o připojení.

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

Parametry

e
SocketAsyncEventArgs

Objekt SocketAsyncEventArgs , který se má použít pro tuto asynchronní operaci soketu.

Návraty

true pokud operace vstupně-výstupní operace čeká na vyřízení. Událost Completed parametru e se vyvolá po dokončení operace.

false pokud se vstupně-výstupní operace dokončila synchronně. Událost Completed parametru e nebude vyvolána a e objekt předaný jako parametr může být zkontrolován okamžitě po volání metody vrátí, aby se načetl výsledek operace.

Výjimky

Argument není platný. K této výjimce dochází v případě, že poskytnutá vyrovnávací paměť není dostatečně velká. Vyrovnávací paměť musí být alespoň 2 * (velikost(SOCKADDR_STORAGE + 16) bajtů.

K této výjimce dochází také v případě, že je zadáno více vyrovnávacích pamětí a BufferList vlastnost není null.

Argument je mimo rozsah. K výjimce dojde, pokud je hodnota Count menší než 0.

Byla požadována neplatná operace. K této výjimce dochází v případě, že akceptující Socket nenaslouchá připojení nebo je přijatý soket svázaný.

Před voláním metody musíte volat metodu Bind(EndPoint)AcceptAsync(SocketAsyncEventArgs) a Listen(Int32) .

K této výjimce dochází také v případě, že soket je již připojen nebo již probíhala operace soketu pomocí zadaného e parametru.

Při pokusu o přístup k soketu došlo k chybě.

Poznámky

Protokoly orientované na připojení můžou používat metodu AcceptAsync k asynchronnímu zpracování příchozích pokusů o připojení. Asynchronní přijímání připojení umožňuje odesílat a přijímat data v samostatném spouštěcím vlákně. Před voláním AcceptAsync metody je nutné volat metodu Listen , která naslouchá příchozím požadavkům na připojení a zařadí do fronty.

Chcete-li být upozorněni na dokončení, musíte vytvořit metodu zpětného volání, která implementuje eventHandler<SocketAsyncEventArgs> delegáta a připojit ho SocketAsyncEventArgs.Completed k události.

Vyžadují se následující vlastnosti a události objektu System.Net.Sockets.SocketAsyncEventArgs :

Volající může volitelně určit existující Socket , který se má použít pro příchozí připojení, zadáním Socket vlastnosti, která se má použít s SocketAsyncEventArgs.AcceptSocket vlastností.

SocketAsyncEventArgs.AcceptSocket Pokud je vlastnost null, je nový Socket vytvořen se stejnými AddressFamily, SocketTypea ProtocolType jako aktuální Socket a nastavený jako SocketAsyncEventArgs.AcceptSocket vlastnost.

Volající může nastavit SocketAsyncEventArgs.UserToken vlastnost na libovolný objekt stavu uživatele požadovaný před voláním AcceptAsync metody, aby informace byly možné získat v metodě zpětného volání. Pokud zpětné volání potřebuje více informací než jeden objekt, je možné vytvořit malou třídu, která bude obsahovat další požadované informace o stavu jako členy.

Volitelně může být k dispozici vyrovnávací paměť, ve které se má přijímat počáteční blok dat v soketu po ConnectAsync úspěšné metodě. V tomto případě SocketAsyncEventArgs.Buffer musí být vlastnost nastavena na vyrovnávací paměť obsahující data, která se mají přijmout, a SocketAsyncEventArgs.Count vlastnost musí být nastavena na maximální počet bajtů dat, které se mají přijmout ve vyrovnávací paměti. Tyto vlastnosti lze nastavit pomocí SocketAsyncEventArgs.SetBuffer metody . Část předané vyrovnávací paměti se interně spotřebuje pro použití podkladovým voláním Winsock AcceptEx. To znamená, že množství vrácených dat bude vždy menší než hodnota SocketAsyncEventArgs.Count vlastnosti v System.Net.Sockets.SocketAsyncEventArgs zadané instanci. Velikost interní vyrovnávací paměti se liší v závislosti na rodině adres soketu. Minimální požadovaná velikost vyrovnávací paměti je 288 bajtů. Pokud je zadána větší velikost vyrovnávací paměti, Socket bude nástroj očekávat další data, než jsou data adresy přijatá voláním Winsock AcceptEx, a počká na přijetí těchto dodatečných dat. Pokud dojde k vypršení časového limitu, připojení se resetuje. Pokud se tedy od určité částky očekávají další data, měla by být velikost vyrovnávací paměti nastavena na minimální velikost vyrovnávací paměti plus tuto částku.

Metoda zpětného volání dokončení by měla prozkoumat SocketAsyncEventArgs.SocketError vlastnost a zjistit, jestli AcceptAsync byla operace úspěšná.

Událost SocketAsyncEventArgs.Completed může v některých případech nastat, když nebylo přijato žádné připojení a způsobí SocketAsyncEventArgs.SocketError , že vlastnost bude nastavena na ConnectionReset. K tomu může dojít v důsledku skenování portů pomocí částečně otevřené kontroly typu SYN (sekvence SYN -> SYN-ACK -> RST). Aplikace používající metodu AcceptAsync by měly být připraveny na zpracování této podmínky.

Viz také

Platí pro

AcceptAsync(CancellationToken)

Přijímá příchozí připojení.

public:
 System::Threading::Tasks::ValueTask<System::Net::Sockets::Socket ^> AcceptAsync(System::Threading::CancellationToken cancellationToken);
public System.Threading.Tasks.ValueTask<System.Net.Sockets.Socket> AcceptAsync (System.Threading.CancellationToken cancellationToken);
member this.AcceptAsync : System.Threading.CancellationToken -> System.Threading.Tasks.ValueTask<System.Net.Sockets.Socket>
Public Function AcceptAsync (cancellationToken As CancellationToken) As ValueTask(Of Socket)

Parametry

cancellationToken
CancellationToken

Token zrušení, který lze použít ke zrušení asynchronní operace.

Návraty

Asynchronní úloha, která se dokončí s akceptovaným soketem.

Výjimky

Byla požadována neplatná operace. K této výjimce dochází v případě, že akceptující Socket nenaslouchá připojení nebo je přijatý soket svázaný.

Před voláním metody musíte volat metodu Bind(EndPoint)AcceptAsync(SocketAsyncEventArgs) a Listen(Int32) .

K této výjimce dochází také v případě, že soket je již připojen nebo již probíhala operace soketu pomocí zadaného e parametru.

Při pokusu o přístup k soketu došlo k chybě.

Token zrušení byl zrušen. Tato výjimka je uložena ve vrácené úloze.

Poznámky

Tato metoda ukládá do úlohy, která vrací všechny výjimky nesouvisejí s používáním, které může vyvolat synchronní protějšek metody. Pokud je ve vrácené úloze uložena výjimka, bude tato výjimka vyvolána při čekání na úkol. Výjimky použití, například ArgumentException, jsou stále vyvolány synchronně. Informace o uložených výjimkách najdete v tématu Výjimky vyvolané nástrojem Accept().

Platí pro

AcceptAsync(Socket, CancellationToken)

Přijímá příchozí připojení.

public:
 System::Threading::Tasks::ValueTask<System::Net::Sockets::Socket ^> AcceptAsync(System::Net::Sockets::Socket ^ acceptSocket, System::Threading::CancellationToken cancellationToken);
public System.Threading.Tasks.ValueTask<System.Net.Sockets.Socket> AcceptAsync (System.Net.Sockets.Socket? acceptSocket, System.Threading.CancellationToken cancellationToken);
member this.AcceptAsync : System.Net.Sockets.Socket * System.Threading.CancellationToken -> System.Threading.Tasks.ValueTask<System.Net.Sockets.Socket>
Public Function AcceptAsync (acceptSocket As Socket, cancellationToken As CancellationToken) As ValueTask(Of Socket)

Parametry

acceptSocket
Socket

Soket, který se má použít pro přijetí připojení.

cancellationToken
CancellationToken

Token zrušení, který lze použít ke zrušení asynchronní operace.

Návraty

Asynchronní úloha, která se dokončí s akceptovaným soketem.

Výjimky

Byla požadována neplatná operace. K této výjimce dochází v případě, že akceptující Socket nenaslouchá připojení nebo je přijatý soket svázaný.

Před voláním metody musíte volat metodu Bind(EndPoint)AcceptAsync(SocketAsyncEventArgs) a Listen(Int32) .

K této výjimce dochází také v případě, že soket je již připojen nebo již probíhala operace soketu pomocí zadaného e parametru.

Při pokusu o přístup k soketu došlo k chybě.

Token zrušení byl zrušen. Tato výjimka je uložena ve vrácené úloze.

Platí pro