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í
| Name | Description |
|---|---|
| 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
- 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 příjem Socket neposlouchá připojení nebo je přijatá soket vázána.
Před voláním metody je nutné volat Bind(EndPoint) metodu a Listen(Int32) metodu AcceptAsync(SocketAsyncEventArgs) .
Při pokusu o přístup k soketu došlo k chybě.
Ta Socket byla uzavřena.
Poznámky
Tato metoda ukládá do úlohy všechny výjimky bez použití, které může vyvolat synchronní protějšek metody. Pokud je výjimka uložena do vrácené úlohy, tato výjimka bude vyvolána, když je úkol očekáván. Výjimky použití, například ArgumentException, jsou stále vyvolány synchronně. V případě uložených výjimek se podívejte na výjimky vyvolané Accept().
Platí pro
AcceptAsync(Socket)
- Zdroj:
- Socket.Tasks.cs
- Zdroj:
- Socket.Tasks.cs
- 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 k 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 příjem Socket neposlouchá připojení nebo je přijatá soket vázána.
Před voláním metody je nutné volat Bind(EndPoint) metodu a Listen(Int32) metodu AcceptAsync(SocketAsyncEventArgs) .
Při pokusu o přístup k soketu došlo k chybě.
Ta Socket byla uzavřena.
Platí pro
AcceptAsync(SocketAsyncEventArgs)
- Zdroj:
- Socket.cs
- Zdroj:
- Socket.cs
- 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 bude vyvolána 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 zkoumán okamžitě po volání metody vrátí načíst 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í, BufferList vlastnost není null.
Argument je mimo rozsah. K výjimce dochází, pokud Count je menší než 0.
Byla požadována neplatná operace. K této výjimce dochází v případě, že příjem Socket neposlouchá připojení nebo je přijatá soket vázána.
Před voláním metody je nutné volat Bind(EndPoint) metodu a Listen(Int32) metodu AcceptAsync(SocketAsyncEventArgs) .
K této výjimce dochází také v případě, že je soket již připojen nebo operace soketu již probíhá pomocí zadaného e parametru.
Při pokusu o přístup k soketu došlo k chybě.
Ta Socket byla uzavřena.
Poznámky
Protokoly orientované na připojení můžou metodu AcceptAsync použít k asynchronnímu zpracování příchozích pokusů o připojení. Příjem připojení asynchronně umožňuje odesílat a přijímat data v samostatném vlákně spouštění. Před voláním AcceptAsync metody musíte volat metodu Listen , která naslouchá příchozím požadavkům na připojení a zařadí se do fronty.
Chcete-li být upozorněni na dokončení, musíte vytvořit metodu zpětného volání, která implementuje delegáta EventHandler<SocketAsyncEventArgs> a připojí ji k SocketAsyncEventArgs.Completed události.
Jsou vyžadovány následující vlastnosti a události objektu System.Net.Sockets.SocketAsyncEventArgs :
Volající může volitelně zadat existující Socket , který se má použít pro příchozí připojení, zadáním Socket vlastnosti, která se má použít SocketAsyncEventArgs.AcceptSocket .
SocketAsyncEventArgs.AcceptSocket Pokud je vlastnost null, je vytvořena nová Socket se stejným AddressFamily, SocketTypea ProtocolType jako aktuální Socket a nastavena jako SocketAsyncEventArgs.AcceptSocket vlastnost.
Volající může před voláním SocketAsyncEventArgs.UserToken metody nastavit AcceptAsync vlastnost na libovolný objekt stavu uživatele, aby informace byly v metodě zpětného volání dostupné. Pokud zpětné volání potřebuje více informací než jeden objekt, lze 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á po úspěšném provedení metody přijmout počáteční blok dat na soketu ConnectAsync . V tomto případě SocketAsyncEventArgs.Buffer musí být vlastnost nastavena na vyrovnávací paměť obsahující data pro příjem a SocketAsyncEventArgs.Count vlastnost musí být nastavena na maximální počet bajtů dat, které mají být přijímány ve vyrovnávací paměti. Tyto vlastnosti lze nastavit pomocí SocketAsyncEventArgs.SetBuffer metody. Část předané vyrovnávací paměti bude spotřebována interně 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 vyrovnávací paměti použité interně 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 pak bude očekávat další data jiná než 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 očekává další data o určité velikosti, měla by být velikost vyrovnávací paměti nastavena na minimální velikost vyrovnávací paměti plus tuto velikost.
Metoda zpětného SocketAsyncEventArgs.SocketError volání dokončení by měla prozkoumat vlastnost a určit, zda AcceptAsync operace byla úspěšná.
Událost SocketAsyncEventArgs.Completed může nastat v některých případech, když není přijato žádné připojení a způsobit SocketAsyncEventArgs.SocketError , že vlastnost je nastavena na ConnectionReset. K tomu může dojít v důsledku prohledávání portů pomocí polootevřené kontroly typu SYN (syn -> SYN-ACK -> sekvence 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
- 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 příjem Socket neposlouchá připojení nebo je přijatá soket vázána.
Před voláním metody je nutné volat Bind(EndPoint) metodu a Listen(Int32) metodu AcceptAsync(SocketAsyncEventArgs) .
Při pokusu o přístup k soketu došlo k chybě.
Ta Socket byla uzavřena.
Token zrušení byl zrušen. Tato výjimka je uložena do vrácené úlohy.
Poznámky
Tato metoda ukládá do úlohy všechny výjimky bez použití, které může vyvolat synchronní protějšek metody. Pokud je výjimka uložena do vrácené úlohy, tato výjimka bude vyvolána, když je úkol očekáván. Výjimky použití, například ArgumentException, jsou stále vyvolány synchronně. V případě uložených výjimek se podívejte na výjimky vyvolané Accept().
Platí pro
AcceptAsync(Socket, CancellationToken)
- Zdroj:
- Socket.Tasks.cs
- Zdroj:
- Socket.Tasks.cs
- 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 k 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 příjem Socket neposlouchá připojení nebo je přijatá soket vázána.
Před voláním metody je nutné volat Bind(EndPoint) metodu a Listen(Int32) metodu AcceptAsync(SocketAsyncEventArgs) .
Při pokusu o přístup k soketu došlo k chybě.
Ta Socket byla uzavřena.
Token zrušení byl zrušen. Tato výjimka je uložena do vrácené úlohy.