Socket.AcceptAsync Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
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
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.