Socket.AcceptAsync(SocketAsyncEventArgs) Metódus

Definíció

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

e
SocketAsyncEventArgs

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.

A következőre érvényes:

Lásd még