Socket.AcceptAsync Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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()
- Zdroj:
- Socket.Tasks.cs
- Zdroj:
- Socket.Tasks.cs
- Zdroj:
- Socket.Tasks.cs
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ě.
Byl Socket zavřený.
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)
- Zdroj:
- Socket.Tasks.cs
- Zdroj:
- Socket.Tasks.cs
- Zdroj:
- Socket.Tasks.cs
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ě.
Byl Socket zavřený.
Platí pro
AcceptAsync(SocketAsyncEventArgs)
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
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
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ě.
Byl Socket zavřený.
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)
- Zdroj:
- Socket.Tasks.cs
- Zdroj:
- Socket.Tasks.cs
- Zdroj:
- Socket.Tasks.cs
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ě.
Byl Socket zavřený.
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)
- Zdroj:
- Socket.Tasks.cs
- Zdroj:
- Socket.Tasks.cs
- Zdroj:
- Socket.Tasks.cs
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ě.
Byl Socket zavřený.
Token zrušení byl zrušen. Tato výjimka je uložena ve vrácené úloze.