Socket.AcceptAsync Metoda

Definicja

Przeciążenia

AcceptAsync()

Akceptuje połączenie przychodzące.

AcceptAsync(Socket)

Akceptuje połączenie przychodzące.

AcceptAsync(SocketAsyncEventArgs)

Rozpoczyna operację asynchroniczną, aby zaakceptować próbę połączenia przychodzącego.

AcceptAsync(CancellationToken)

Akceptuje połączenie przychodzące.

AcceptAsync(Socket, CancellationToken)

Akceptuje połączenie przychodzące.

AcceptAsync()

Źródło:
Socket.Tasks.cs
Źródło:
Socket.Tasks.cs
Źródło:
Socket.Tasks.cs

Akceptuje połączenie przychodzące.

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)

Zwraca

Asynchroniczne zadanie, które kończy się akceptowanym gniazdem.

Wyjątki

Zażądano nieprawidłowej operacji. Ten wyjątek występuje, jeśli akceptowanie Socket nie nasłuchuje połączeń lub zaakceptowane gniazdo jest powiązane.

Przed wywołaniem metody i należy wywołać Bind(EndPoint) metodę AcceptAsync(SocketAsyncEventArgs) iListen(Int32).

Ten wyjątek występuje również wtedy, gdy gniazdo jest już połączone lub operacja gniazda była już w toku przy użyciu określonego e parametru.

Wystąpił błąd podczas próby uzyskania dostępu do gniazda.

Została zamknięta Socket .

Uwagi

Ta metoda przechowuje w zadaniu wszystkie wyjątki inne niż użycie, które mogą zgłaszać synchroniczna odpowiednik metody. Jeśli wyjątek jest przechowywany w zwróconym zadaniu, ten wyjątek zostanie zgłoszony po oczekiwaniu na zadanie. Wyjątki użycia, takie jak ArgumentException, są nadal zgłaszane synchronicznie. Aby uzyskać informacje o przechowywanych wyjątkach, zobacz wyjątki zgłaszane przez Accept()usługę .

Dotyczy

AcceptAsync(Socket)

Źródło:
Socket.Tasks.cs
Źródło:
Socket.Tasks.cs
Źródło:
Socket.Tasks.cs

Akceptuje połączenie przychodzące.

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

Gniazdo do użycia do akceptowania połączenia.

Zwraca

Asynchroniczne zadanie, które kończy się akceptowanym gniazdem.

Wyjątki

Zażądano nieprawidłowej operacji. Ten wyjątek występuje, jeśli akceptowanie Socket nie nasłuchuje połączeń lub zaakceptowane gniazdo jest powiązane.

Przed wywołaniem metody i należy wywołać Bind(EndPoint) metodę AcceptAsync(SocketAsyncEventArgs) iListen(Int32).

Ten wyjątek występuje również wtedy, gdy gniazdo jest już połączone lub operacja gniazda była już w toku przy użyciu określonego e parametru.

Wystąpił błąd podczas próby uzyskania dostępu do gniazda.

Została zamknięta Socket .

Dotyczy

AcceptAsync(SocketAsyncEventArgs)

Źródło:
Socket.cs
Źródło:
Socket.cs
Źródło:
Socket.cs

Rozpoczyna operację asynchroniczną, aby zaakceptować próbę połączenia przychodzącego.

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

Obiekt SocketAsyncEventArgs do użycia dla tej operacji asynchronicznego gniazda.

Zwraca

true jeśli operacja we/wy jest oczekująca. Zdarzenie Completed parametru e zostanie podniesione po zakończeniu operacji.

false jeśli operacja we/wy została ukończona synchronicznie. Zdarzenie Completed parametru e nie zostanie podniesione, a e obiekt przekazany jako parametr może zostać zbadany natychmiast po powrocie wywołania metody w celu pobrania wyniku operacji.

Wyjątki

Argument jest nieprawidłowy. Ten wyjątek występuje, jeśli podany bufor nie jest wystarczająco duży. Bufor musi mieć co najmniej 2 * (rozmiarof(SOCKADDR_STORAGE + 16 bajtów).

Ten wyjątek występuje również, jeśli określono wiele buforów, BufferList właściwość nie ma wartości null.

Argument jest poza zakresem. Wyjątek występuje, jeśli wartość Count jest mniejsza niż 0.

Zażądano nieprawidłowej operacji. Ten wyjątek występuje, jeśli akceptowanie Socket nie nasłuchuje połączeń lub zaakceptowane gniazdo jest powiązane.

Przed wywołaniem metody i należy wywołać Bind(EndPoint) metodę AcceptAsync(SocketAsyncEventArgs) iListen(Int32).

Ten wyjątek występuje również wtedy, gdy gniazdo jest już połączone lub operacja gniazda była już w toku przy użyciu określonego e parametru.

Wystąpił błąd podczas próby uzyskania dostępu do gniazda.

Została zamknięta Socket .

Uwagi

Protokoły zorientowane na połączenia mogą używać AcceptAsync metody do asynchronicznego przetwarzania prób połączenia przychodzącego. Akceptowanie połączeń asynchronicznie umożliwia wysyłanie i odbieranie danych w osobnym wątku wykonywania. Przed wywołaniem metody należy wywołać metodę AcceptAsyncListen , aby nasłuchiwać żądań połączeń przychodzących i kolejkować je.

Aby otrzymywać powiadomienia o zakończeniu, należy utworzyć metodę wywołania zwrotnego, która implementuje delegata EventHandler<SocketAsyncEventArgs> i podłączyć go do SocketAsyncEventArgs.Completed zdarzenia.

Wymagane są następujące właściwości i zdarzenia obiektu System.Net.Sockets.SocketAsyncEventArgs :

Obiekt wywołujący może opcjonalnie określić istniejący Socket element do użycia dla połączenia przychodzącego, określając Socket wartość do użycia z właściwością SocketAsyncEventArgs.AcceptSocket .

SocketAsyncEventArgs.AcceptSocket Jeśli właściwość ma wartość null, nowa Socket jest konstruowana z tym samym AddressFamilyelementem , SocketTypei ProtocolType co bieżąca Socket i ustawiona jako SocketAsyncEventArgs.AcceptSocket właściwość .

Obiekt wywołujący może ustawić SocketAsyncEventArgs.UserToken właściwość na dowolny obiekt stanu użytkownika żądany przed wywołaniem AcceptAsync metody, aby informacje mogły zostać pobrane w metodzie wywołania zwrotnego. Jeśli wywołanie zwrotne wymaga więcej informacji niż pojedynczy obiekt, można utworzyć małą klasę, aby przechowywać inne wymagane informacje o stanie jako elementy członkowskie.

Opcjonalnie po pomyślnym zakończeniu ConnectAsync metody można podać bufor, w którym można odbierać początkowy blok danych na gniazdach. W takim przypadku SocketAsyncEventArgs.Buffer właściwość musi być ustawiona na bufor zawierający dane do odbierania, a SocketAsyncEventArgs.Count właściwość musi być ustawiona na maksymalną liczbę bajtów danych do odbierania w buforze. Te właściwości można ustawić przy użyciu SocketAsyncEventArgs.SetBuffer metody . Część buforu przekazanego zostanie użyta wewnętrznie do użycia przez bazowe wywołanie Winsock AcceptEx. Oznacza to, że ilość zwróconych danych będzie zawsze mniejsza niż wartość SocketAsyncEventArgs.Count właściwości podanej w wystąpieniu System.Net.Sockets.SocketAsyncEventArgs . Ilość buforu używanego wewnętrznie zależy od rodziny adresów gniazda. Wymagany minimalny rozmiar buforu to 288 bajtów. Jeśli zostanie określony większy rozmiar buforu, Socket będzie oczekiwać dodatkowych danych innych niż dane adresowe odebrane przez wywołanie Winsock AcceptEx i zaczeka na odebranie dodatkowych danych. Jeśli wystąpi przekroczenie limitu czasu, połączenie zostanie zresetowane. Jeśli więc oczekiwane są dodatkowe dane o określonej ilości, rozmiar buforu powinien zostać ustawiony na minimalny rozmiar buforu i tę kwotę.

Metoda wywołania zwrotnego ukończenia powinna zbadać właściwość, SocketAsyncEventArgs.SocketError aby określić, czy AcceptAsync operacja zakończyła się pomyślnie.

Zdarzenie SocketAsyncEventArgs.Completed może wystąpić w niektórych przypadkach, gdy żadne połączenie nie zostało zaakceptowane i powoduje SocketAsyncEventArgs.SocketError ustawienie właściwości na ConnectionReset. Może to nastąpić w wyniku skanowania portów przy użyciu pół otwartego skanowania typu SYN (sekwencja SYN -> SYN-ACK -> RST). Aplikacje korzystające z AcceptAsync metody powinny być przygotowane do obsługi tego warunku.

Zobacz też

Dotyczy

AcceptAsync(CancellationToken)

Źródło:
Socket.Tasks.cs
Źródło:
Socket.Tasks.cs
Źródło:
Socket.Tasks.cs

Akceptuje połączenie przychodzące.

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 anulowania, który może służyć do anulowania operacji asynchronicznej.

Zwraca

Asynchroniczne zadanie, które kończy się akceptowanym gniazdem.

Wyjątki

Zażądano nieprawidłowej operacji. Ten wyjątek występuje, jeśli akceptowanie Socket nie nasłuchuje połączeń lub zaakceptowane gniazdo jest powiązane.

Przed wywołaniem metody i należy wywołać Bind(EndPoint) metodę AcceptAsync(SocketAsyncEventArgs) iListen(Int32).

Ten wyjątek występuje również wtedy, gdy gniazdo jest już połączone lub operacja gniazda była już w toku przy użyciu określonego e parametru.

Wystąpił błąd podczas próby uzyskania dostępu do gniazda.

Została zamknięta Socket .

Token anulowania został anulowany. Ten wyjątek jest przechowywany w zwróconym zadaniu.

Uwagi

Ta metoda przechowuje w zadaniu wszystkie wyjątki inne niż użycie, które mogą zgłaszać synchroniczna odpowiednik metody. Jeśli wyjątek jest przechowywany w zwróconym zadaniu, ten wyjątek zostanie zgłoszony po oczekiwaniu na zadanie. Wyjątki użycia, takie jak ArgumentException, są nadal zgłaszane synchronicznie. Aby uzyskać informacje o przechowywanych wyjątkach, zobacz wyjątki zgłaszane przez Accept()usługę .

Dotyczy

AcceptAsync(Socket, CancellationToken)

Źródło:
Socket.Tasks.cs
Źródło:
Socket.Tasks.cs
Źródło:
Socket.Tasks.cs

Akceptuje połączenie przychodzące.

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

Gniazdo do użycia do akceptowania połączenia.

cancellationToken
CancellationToken

Token anulowania, który może służyć do anulowania operacji asynchronicznej.

Zwraca

Asynchroniczne zadanie, które kończy się akceptowanym gniazdem.

Wyjątki

Zażądano nieprawidłowej operacji. Ten wyjątek występuje, jeśli akceptowanie Socket nie nasłuchuje połączeń lub zaakceptowane gniazdo jest powiązane.

Przed wywołaniem metody i należy wywołać Bind(EndPoint) metodę AcceptAsync(SocketAsyncEventArgs) iListen(Int32).

Ten wyjątek występuje również wtedy, gdy gniazdo jest już połączone lub operacja gniazda była już w toku przy użyciu określonego e parametru.

Wystąpił błąd podczas próby uzyskania dostępu do gniazda.

Została zamknięta Socket .

Token anulowania został anulowany. Ten wyjątek jest przechowywany w zwróconym zadaniu.

Dotyczy