Socket.AcceptAsync Metódus
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Túlterhelések
| Name | Description |
|---|---|
| AcceptAsync() |
Bejövő kapcsolatot fogad el. |
| AcceptAsync(Socket) |
Bejövő kapcsolatot fogad el. |
| AcceptAsync(SocketAsyncEventArgs) |
A bejövő kapcsolati kísérlet elfogadásához aszinkron műveletet indít el. |
| AcceptAsync(CancellationToken) |
Bejövő kapcsolatot fogad el. |
| AcceptAsync(Socket, CancellationToken) |
Bejövő kapcsolatot fogad el. |
AcceptAsync()
- Forrás:
- Socket.Tasks.cs
- Forrás:
- Socket.Tasks.cs
- Forrás:
- Socket.Tasks.cs
- Forrás:
- Socket.Tasks.cs
- Forrás:
- Socket.Tasks.cs
Bejövő kapcsolatot fogad el.
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)
Válaszok
Aszinkron feladat, amely az elfogadott szoftvercsatornával fejeződik be.
Kivételek
Érvénytelen műveletet kért a rendszer. Ez a kivétel akkor fordul elő, ha az elfogadás Socket nem figyeli a kapcsolatokat, vagy az elfogadott szoftvercsatorna kötött.
A metódus meghívása előtt meg kell hívnia a Bind(EndPoint) metódust és Listen(Int32) a metódust AcceptAsync(SocketAsyncEventArgs) .
Hiba történt a szoftvercsatorna elérésekor.
A Socket le van zárva.
Megjegyzések
Ez a metódus a feladatban tárolja az összes olyan nem használati kivételt, amelyet a metódus szinkron megfelelője tud dobni. Ha egy kivételt tárol a visszaadott tevékenységben, akkor a rendszer akkor küldi el a kivételt, amikor a feladatra vár. A használati kivételek(például ArgumentException) továbbra is szinkron módon jelennek meg. A tárolt kivételekről lásd a következő által Accept()kiadott kivételeket: .
A következőre érvényes:
AcceptAsync(Socket)
- Forrás:
- Socket.Tasks.cs
- Forrás:
- Socket.Tasks.cs
- Forrás:
- Socket.Tasks.cs
- Forrás:
- Socket.Tasks.cs
- Forrás:
- Socket.Tasks.cs
Bejövő kapcsolatot fogad el.
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)
Paraméterek
- acceptSocket
- Socket
A kapcsolat elfogadásához használandó szoftvercsatorna.
Válaszok
Aszinkron feladat, amely az elfogadott szoftvercsatornával fejeződik be.
Kivételek
Érvénytelen műveletet kért a rendszer. Ez a kivétel akkor fordul elő, ha az elfogadás Socket nem figyeli a kapcsolatokat, vagy az elfogadott szoftvercsatorna kötött.
A metódus meghívása előtt meg kell hívnia a Bind(EndPoint) metódust és Listen(Int32) a metódust AcceptAsync(SocketAsyncEventArgs) .
Hiba történt a szoftvercsatorna elérésekor.
A Socket le van zárva.
A következőre érvényes:
AcceptAsync(SocketAsyncEventArgs)
- Forrás:
- Socket.cs
- Forrás:
- Socket.cs
- Forrás:
- Socket.cs
- Forrás:
- Socket.cs
- Forrás:
- Socket.cs
A bejövő kapcsolati kísérlet elfogadásához aszinkron műveletet indít el.
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éterek
Az SocketAsyncEventArgs aszinkron szoftvercsatorna-művelethez használni kívánt objektum.
Válaszok
true ha az I/O-művelet függőben van. A Completed paraméter eseménye a e művelet befejezésekor lesz előállítva.
false ha az I/O-művelet szinkron módon fejeződött be. A Completed paraméter eseménye e nem lesz előállítva, és a e paraméterként átadott objektum azonnal megvizsgálható, miután a metódushívás visszatér a művelet eredményének lekéréséhez.
Kivételek
Érvénytelen argumentum. Ez a kivétel akkor fordul elő, ha a megadott puffer nem elég nagy. A puffernek legalább 2 * (sizeof(SOCKADDR_STORAGE + 16)) bájtnak kell lennie.
Ez a kivétel akkor is előfordul, ha több puffer van megadva, a BufferList tulajdonság nem null.
Az argumentumok tartományon kívülre kerülnek. A kivétel akkor fordul elő, ha a Count szám kisebb, mint 0.
Érvénytelen műveletet kért a rendszer. Ez a kivétel akkor fordul elő, ha az elfogadás Socket nem figyeli a kapcsolatokat, vagy az elfogadott szoftvercsatorna kötött.
A metódus meghívása előtt meg kell hívnia a Bind(EndPoint) metódust és Listen(Int32) a metódust AcceptAsync(SocketAsyncEventArgs) .
Ez a kivétel akkor is előfordul, ha a szoftvercsatorna már csatlakoztatva van, vagy egy szoftvercsatorna-művelet már folyamatban volt a megadott e paraméterrel.
Hiba történt a szoftvercsatorna elérésekor.
A Socket le van zárva.
Megjegyzések
A kapcsolatorientált protokollok a AcceptAsync metódussal aszinkron módon dolgozhatják fel a bejövő kapcsolati kísérleteket. A kapcsolatok aszinkron elfogadása lehetővé teszi az adatok külön végrehajtási szálon belüli küldését és fogadását. A metódus meghívása AcceptAsync előtt meg kell hívnia a metódust a Listen bejövő kapcsolatkérések figyeléséhez és várólistára helyezéséhez.
Ha értesítést szeretne kapni a befejezésről, létre kell hoznia egy visszahívási módszert, amely implementálja az EventHandler<SocketAsyncEventArgs> delegáltját, és csatlakoztatja az SocketAsyncEventArgs.Completed eseményhez.
Az objektumon a System.Net.Sockets.SocketAsyncEventArgs következő tulajdonságokra és eseményekre van szükség:
A hívó opcionálisan megadhatja a bejövő kapcsolathoz használandó meglévőt Socket a Socket tulajdonsággal használni kívánt beállítás megadásával SocketAsyncEventArgs.AcceptSocket .
Ha a SocketAsyncEventArgs.AcceptSocket tulajdonság null értékű, a rendszer egy újat Socket hoz létre ugyanazzal AddressFamilya , SocketTypeés ProtocolType az aktuális Socket értékével, és a SocketAsyncEventArgs.AcceptSocket tulajdonságként van beállítva.
A hívó a SocketAsyncEventArgs.UserToken metódus meghívása előtt bármilyen felhasználói állapotobjektumra beállíthatja a AcceptAsync tulajdonságot, hogy az információk lekérthetők legyenek a visszahívási metódusban. Ha a visszahívásnak több információra van szüksége, mint egyetlen objektum, létrehozhat egy kis osztályt, amely tagként tárolja a többi szükséges állapotinformációt.
Opcionálisan egy puffer is megadható, amelyben a rendszer a metódus sikeres végrehajtása után fogadja a szoftvercsatornán a ConnectAsync kezdeti adatblokkot. Ebben az esetben a tulajdonságot a SocketAsyncEventArgs.Buffer fogadó adatokat tartalmazó pufferre kell állítani, a SocketAsyncEventArgs.Count tulajdonságot pedig a pufferben fogadni kívánt adat bájtjainak maximális számára kell beállítani. Ezek a tulajdonságok a SocketAsyncEventArgs.SetBuffer metódussal állíthatók be. Az átadott puffer egy része belsőleg lesz felhasználva az alapul szolgáló Winsock AcceptEx-hívás számára. Ez azt jelenti, hogy a visszaadott adatok mennyisége mindig kisebb lesz, mint a SocketAsyncEventArgs.Count megadott példányon System.Net.Sockets.SocketAsyncEventArgs lévő tulajdonság értéke. A belsőleg használt puffer mennyisége a szoftvercsatorna címcsaládja alapján változik. A minimális pufferméret 288 bájt. Ha nagyobb pufferméretet ad meg, akkor a Socket Winsock AcceptEx hívás által fogadott címadatoktól eltérő további adatokra számíthat, és megvárja a további adatok fogadását. Időtúllépés esetén a kapcsolat alaphelyzetbe áll. Tehát ha további adatokra van szükség egy adott mennyiséghez, akkor a puffer méretét a minimális pufferméretre kell beállítani, plusz ezt az összeget.
A befejezési visszahívási metódusnak meg kell vizsgálnia a SocketAsyncEventArgs.SocketError tulajdonságot annak megállapításához, hogy a AcceptAsync művelet sikeres volt-e.
Az SocketAsyncEventArgs.Completed esemény akkor fordulhat elő, ha a rendszer nem fogad el kapcsolatot, és a SocketAsyncEventArgs.SocketError tulajdonság értéke ConnectionReseta következő lehet: . Ez egy félig nyitott SYN-típusvizsgálat (SYN -> SYN-ACK -> RST-sorozat) portvizsgálatának eredményeként fordulhat elő. A metódust AcceptAsync használó alkalmazásokat fel kell készíteni a feltétel kezelésére.
Lásd még
A következőre érvényes:
AcceptAsync(CancellationToken)
- Forrás:
- Socket.Tasks.cs
- Forrás:
- Socket.Tasks.cs
- Forrás:
- Socket.Tasks.cs
- Forrás:
- Socket.Tasks.cs
- Forrás:
- Socket.Tasks.cs
Bejövő kapcsolatot fogad el.
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)
Paraméterek
- cancellationToken
- CancellationToken
Az aszinkron művelet megszakításához használható lemondási jogkivonat.
Válaszok
Aszinkron feladat, amely az elfogadott szoftvercsatornával fejeződik be.
Kivételek
Érvénytelen műveletet kért a rendszer. Ez a kivétel akkor fordul elő, ha az elfogadás Socket nem figyeli a kapcsolatokat, vagy az elfogadott szoftvercsatorna kötött.
A metódus meghívása előtt meg kell hívnia a Bind(EndPoint) metódust és Listen(Int32) a metódust AcceptAsync(SocketAsyncEventArgs) .
Hiba történt a szoftvercsatorna elérésekor.
A Socket le van zárva.
A lemondási jogkivonat megszakadt. Ezt a kivételt a rendszer a visszaadott tevékenységben tárolja.
Megjegyzések
Ez a metódus a feladatban tárolja az összes olyan nem használati kivételt, amelyet a metódus szinkron megfelelője tud dobni. Ha egy kivételt tárol a visszaadott tevékenységben, akkor a rendszer akkor küldi el a kivételt, amikor a feladatra vár. A használati kivételek(például ArgumentException) továbbra is szinkron módon jelennek meg. A tárolt kivételekről lásd a következő által Accept()kiadott kivételeket: .
A következőre érvényes:
AcceptAsync(Socket, CancellationToken)
- Forrás:
- Socket.Tasks.cs
- Forrás:
- Socket.Tasks.cs
- Forrás:
- Socket.Tasks.cs
- Forrás:
- Socket.Tasks.cs
- Forrás:
- Socket.Tasks.cs
Bejövő kapcsolatot fogad el.
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)
Paraméterek
- acceptSocket
- Socket
A kapcsolat elfogadásához használandó szoftvercsatorna.
- cancellationToken
- CancellationToken
Az aszinkron művelet megszakításához használható lemondási jogkivonat.
Válaszok
Aszinkron feladat, amely az elfogadott szoftvercsatornával fejeződik be.
Kivételek
Érvénytelen műveletet kért a rendszer. Ez a kivétel akkor fordul elő, ha az elfogadás Socket nem figyeli a kapcsolatokat, vagy az elfogadott szoftvercsatorna kötött.
A metódus meghívása előtt meg kell hívnia a Bind(EndPoint) metódust és Listen(Int32) a metódust AcceptAsync(SocketAsyncEventArgs) .
Hiba történt a szoftvercsatorna elérésekor.
A Socket le van zárva.
A lemondási jogkivonat megszakadt. Ezt a kivételt a rendszer a visszaadott tevékenységben tárolja.