Socket.AcceptAsync Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Перегрузки
| Имя | Описание |
|---|---|
| AcceptAsync() |
Принимает входящее подключение. |
| AcceptAsync(Socket) |
Принимает входящее подключение. |
| AcceptAsync(SocketAsyncEventArgs) |
Начинает асинхронную операцию для принятия входящей попытки подключения. |
| AcceptAsync(CancellationToken) |
Принимает входящее подключение. |
| AcceptAsync(Socket, CancellationToken) |
Принимает входящее подключение. |
AcceptAsync()
- Исходный код:
- Socket.Tasks.cs
- Исходный код:
- Socket.Tasks.cs
- Исходный код:
- Socket.Tasks.cs
- Исходный код:
- Socket.Tasks.cs
- Исходный код:
- Socket.Tasks.cs
Принимает входящее подключение.
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)
Возвращаемое значение
Асинхронная задача, которая завершается с принятым сокетом.
Исключения
Запрошена недопустимая операция. Это исключение возникает, если прием Socket не прослушивает подключения или принятый сокет привязан.
Перед вызовом Bind(EndPoint)AcceptAsync(SocketAsyncEventArgs) метода необходимо вызвать метод и Listen(Int32) метод.
Произошла ошибка при попытке доступа к сокету.
Он Socket был закрыт.
Комментарии
Этот метод сохраняет в задаче все исключения без использования, которые может вызывать синхронный аналог метода. Если исключение хранится в возвращаемой задаче, это исключение будет создано при ожидании задачи. Исключения использования, такие как ArgumentException, по-прежнему выбрасываются синхронно. Сведения о сохраненных исключениях см. в исключениях, создаваемых Accept().
Применяется к
AcceptAsync(Socket)
- Исходный код:
- Socket.Tasks.cs
- Исходный код:
- Socket.Tasks.cs
- Исходный код:
- Socket.Tasks.cs
- Исходный код:
- Socket.Tasks.cs
- Исходный код:
- Socket.Tasks.cs
Принимает входящее подключение.
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)
Параметры
- acceptSocket
- Socket
Сокет, используемый для принятия подключения.
Возвращаемое значение
Асинхронная задача, которая завершается с принятым сокетом.
Исключения
Запрошена недопустимая операция. Это исключение возникает, если прием Socket не прослушивает подключения или принятый сокет привязан.
Перед вызовом Bind(EndPoint)AcceptAsync(SocketAsyncEventArgs) метода необходимо вызвать метод и Listen(Int32) метод.
Произошла ошибка при попытке доступа к сокету.
Он Socket был закрыт.
Применяется к
AcceptAsync(SocketAsyncEventArgs)
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
- Исходный код:
- Socket.cs
Начинает асинхронную операцию для принятия входящей попытки подключения.
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
Параметры
Объект SocketAsyncEventArgs , используемый для этой асинхронной операции сокета.
Возвращаемое значение
e будет возникать после завершения операции.
false Если операция ввода-вывода завершилась синхронно. Событие Completed параметра e не будет возникать, и e объект, переданный в качестве параметра, может быть рассмотрен сразу после вызова метода, чтобы получить результат операции.
Исключения
Недопустимый аргумент. Это исключение возникает, если предоставленный буфер недостаточно велик. Буфер должен быть не менее 2 * (sizeof(SOCKADDR_STORAGE + 16)) байтов.
Это исключение также возникает, если задано несколько буферов, BufferList свойство не равно NULL.
Аргумент выходит за пределы диапазона. Исключение возникает, если Count значение меньше 0.
Запрошена недопустимая операция. Это исключение возникает, если прием Socket не прослушивает подключения или принятый сокет привязан.
Перед вызовом Bind(EndPoint)AcceptAsync(SocketAsyncEventArgs) метода необходимо вызвать метод и Listen(Int32) метод.
Это исключение также возникает, если сокет уже подключен или операция сокета уже выполнялась с помощью указанного e параметра.
Произошла ошибка при попытке доступа к сокету.
Он Socket был закрыт.
Комментарии
Протоколы, ориентированные на подключение, могут использовать AcceptAsync метод для асинхронной обработки входящих попыток подключения. Прием подключений асинхронно дает возможность отправлять и получать данные в отдельном потоке выполнения. Перед вызовом AcceptAsyncListen метода необходимо вызвать метод для прослушивания и очереди входящих запросов на подключение.
Чтобы получить уведомление о завершении, необходимо создать метод обратного вызова, реализующий делегат EventHandler<SocketAsyncEventArgs> и перехватив его к событию SocketAsyncEventArgs.Completed .
Требуются следующие свойства и события объекта System.Net.Sockets.SocketAsyncEventArgs :
Вызывающий объект может дополнительно указать существующую Socket , используемую для входящего подключения, указав Socket используемое с свойством SocketAsyncEventArgs.AcceptSocket значение.
SocketAsyncEventArgs.AcceptSocket Если свойство равно null, новое Socket создается с таким же AddressFamilyзначением, SocketTypeа текущее Socket и ProtocolType задано как SocketAsyncEventArgs.AcceptSocket свойство.
Вызывающий SocketAsyncEventArgs.UserToken объект может задать свойство любому объекту пользовательского AcceptAsync состояния, требуемому перед вызовом метода, чтобы информация была извлечена в методе обратного вызова. Если обратный вызов требует больше информации, чем один объект, можно создать небольшой класс для хранения других необходимых сведений о состоянии в качестве членов.
При необходимости буфер может быть предоставлен, в котором для получения начального блока данных в сокете после успешного ConnectAsync выполнения метода. В этом случае SocketAsyncEventArgs.Buffer свойству необходимо задать буфер, содержащий данные для получения, и SocketAsyncEventArgs.Count свойство должно быть установлено в максимальное число байтов данных для получения в буфере. Эти свойства можно задать с помощью SocketAsyncEventArgs.SetBuffer метода. Часть переданного буфера будет использоваться внутренне для использования базовым вызовом Winsock AcceptEx. Это означает, что объем возвращаемых данных всегда будет меньше значения SocketAsyncEventArgs.Count свойства в предоставленном экземпляре System.Net.Sockets.SocketAsyncEventArgs . Объем буфера, используемого внутренне, зависит от семейства адресов сокета. Минимальный размер буфера составляет 288 байт. Если указан более большой размер буфера, то ожидается, что некоторые дополнительные данные, отличные от данных адреса, Socket полученных вызовом Winsock AcceptEx, и подождите, пока эти дополнительные данные не будут получены. Если происходит время ожидания, подключение сбрасывается. Таким образом, если для дополнительных данных ожидается определенный объем, то размер буфера должен быть установлен на минимальный размер буфера плюс этот объем.
Метод обратного вызова завершения должен проверить SocketAsyncEventArgs.SocketError свойство, чтобы определить, была ли AcceptAsync операция успешной.
Событие SocketAsyncEventArgs.Completed может произойти в некоторых случаях, если подключение не было принято и не SocketAsyncEventArgs.SocketError задано свойство ConnectionReset. Это может произойти в результате сканирования портов с помощью полуоткрытой проверки типа SYN (syn -> SYN-ACK -> RST-последовательности). Приложения, использующие метод, AcceptAsync должны быть подготовлены для обработки этого условия.
См. также раздел
Применяется к
AcceptAsync(CancellationToken)
- Исходный код:
- Socket.Tasks.cs
- Исходный код:
- Socket.Tasks.cs
- Исходный код:
- Socket.Tasks.cs
- Исходный код:
- Socket.Tasks.cs
- Исходный код:
- Socket.Tasks.cs
Принимает входящее подключение.
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)
Параметры
- cancellationToken
- CancellationToken
Маркер отмены, который можно использовать для отмены асинхронной операции.
Возвращаемое значение
Асинхронная задача, которая завершается с принятым сокетом.
Исключения
Запрошена недопустимая операция. Это исключение возникает, если прием Socket не прослушивает подключения или принятый сокет привязан.
Перед вызовом Bind(EndPoint)AcceptAsync(SocketAsyncEventArgs) метода необходимо вызвать метод и Listen(Int32) метод.
Произошла ошибка при попытке доступа к сокету.
Он Socket был закрыт.
Маркер отмены был отменен. Это исключение хранится в возвращаемой задаче.
Комментарии
Этот метод сохраняет в задаче все исключения без использования, которые может вызывать синхронный аналог метода. Если исключение хранится в возвращаемой задаче, это исключение будет создано при ожидании задачи. Исключения использования, такие как ArgumentException, по-прежнему выбрасываются синхронно. Сведения о сохраненных исключениях см. в исключениях, создаваемых Accept().
Применяется к
AcceptAsync(Socket, CancellationToken)
- Исходный код:
- Socket.Tasks.cs
- Исходный код:
- Socket.Tasks.cs
- Исходный код:
- Socket.Tasks.cs
- Исходный код:
- Socket.Tasks.cs
- Исходный код:
- Socket.Tasks.cs
Принимает входящее подключение.
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)
Параметры
- acceptSocket
- Socket
Сокет, используемый для принятия подключения.
- cancellationToken
- CancellationToken
Маркер отмены, который можно использовать для отмены асинхронной операции.
Возвращаемое значение
Асинхронная задача, которая завершается с принятым сокетом.
Исключения
Запрошена недопустимая операция. Это исключение возникает, если прием Socket не прослушивает подключения или принятый сокет привязан.
Перед вызовом Bind(EndPoint)AcceptAsync(SocketAsyncEventArgs) метода необходимо вызвать метод и Listen(Int32) метод.
Произошла ошибка при попытке доступа к сокету.
Он Socket был закрыт.
Маркер отмены был отменен. Это исключение хранится в возвращаемой задаче.