Socket.AcceptAsync Método

Definición

Sobrecargas

AcceptAsync()

Acepta una conexión entrante.

AcceptAsync(Socket)

Acepta una conexión entrante.

AcceptAsync(SocketAsyncEventArgs)

Comienza una operación asincrónica para aceptar un intento de conexión entrante.

AcceptAsync(CancellationToken)

Acepta una conexión entrante.

AcceptAsync(Socket, CancellationToken)

Acepta una conexión entrante.

AcceptAsync()

Source:
Socket.Tasks.cs
Source:
Socket.Tasks.cs
Source:
Socket.Tasks.cs

Acepta una conexión entrante.

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)

Devoluciones

Tarea asincrónica que se completa con el socket aceptado.

Excepciones

Se ha solicitado una operación no válida. Esta excepción se produce si el Socket de aceptación no realiza escuchas para las conexiones o el socket aceptado está enlazado.

Debe llamar al método Bind(EndPoint) y Listen(Int32) antes de llamar al método AcceptAsync(SocketAsyncEventArgs).

Esta excepción también se produce si el socket ya está conectado o si ya hay una operación de socket en curso con el parámetro e especificado.

Error al intentar acceder al socket.

El Socket se ha cerrado.

Comentarios

Este método almacena en la tarea que devuelve todas las excepciones que no son de uso que puede producir el homólogo sincrónico del método. Si se almacena una excepción en la tarea devuelta, esa excepción se producirá cuando se espere a la tarea. Las excepciones de uso, como ArgumentException, se siguen produciendo de forma sincrónica. Para ver las excepciones almacenadas, vea las excepciones producidas por Accept().

Se aplica a

AcceptAsync(Socket)

Source:
Socket.Tasks.cs
Source:
Socket.Tasks.cs
Source:
Socket.Tasks.cs

Acepta una conexión entrante.

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)

Parámetros

acceptSocket
Socket

Socket que se va a usar para aceptar la conexión.

Devoluciones

Tarea asincrónica que se completa con el socket aceptado.

Excepciones

Se ha solicitado una operación no válida. Esta excepción se produce si el Socket de aceptación no realiza escuchas para las conexiones o el socket aceptado está enlazado.

Debe llamar al método Bind(EndPoint) y Listen(Int32) antes de llamar al método AcceptAsync(SocketAsyncEventArgs).

Esta excepción también se produce si el socket ya está conectado o si ya hay una operación de socket en curso con el parámetro e especificado.

Error al intentar acceder al socket.

El Socket se ha cerrado.

Se aplica a

AcceptAsync(SocketAsyncEventArgs)

Source:
Socket.cs
Source:
Socket.cs
Source:
Socket.cs

Comienza una operación asincrónica para aceptar un intento de conexión entrante.

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

Parámetros

e
SocketAsyncEventArgs

Objeto SocketAsyncEventArgs que se usa para esta operación de socket asincrónica.

Devoluciones

Devuelve true si la operación de E/S está pendiente. Al completar la operación se provoca el evento Completed del parámetro e.

Devuelve false si la operación de E/S se ha completado de forma sincrónica. El evento Completed del parámetro e no se provoca y el objeto e que se pasa como parámetro puede examinarse inmediatamente después de que se devuelva la llamada al método para recuperar el resultado de la operación.

Excepciones

Un argumento no es válido. Esta excepción produce si el búfer proporcionado no es suficientemente grande. El búfer debe ser de al menos 2 bytes * (sizeof(SOCKADDR_STORAGE + 16).

Esta excepción también se produce si se especifican varios búferes; es decir, si la propiedad BufferList no es null.

Un argumento está fuera de intervalo. La excepción produce si Count es menor que 0.

Se ha solicitado una operación no válida. Esta excepción se produce si el Socket de aceptación no realiza escuchas para las conexiones o el socket aceptado está enlazado.

Debe llamar al método Bind(EndPoint) y Listen(Int32) antes de llamar al método AcceptAsync(SocketAsyncEventArgs).

Esta excepción también se produce si el socket ya está conectado o si ya hay una operación de socket en curso con el parámetro e especificado.

Error al intentar acceder al socket.

El Socket se ha cerrado.

Comentarios

Los protocolos orientados a la conexión pueden usar el AcceptAsync método para procesar de forma asincrónica los intentos de conexión entrantes. Aceptar conexiones de forma asincrónica ofrece la capacidad de enviar y recibir datos dentro de un subproceso de ejecución independiente. Antes de llamar al AcceptAsync método , debe llamar al Listen método para escuchar y poner en cola las solicitudes de conexión entrantes.

Para recibir una notificación de finalización, debe crear un método de devolución de llamada que implemente el delegado EventHandler<SocketAsyncEventArgs> y enlazarlo al SocketAsyncEventArgs.Completed evento.

Se requieren las siguientes propiedades y eventos en el System.Net.Sockets.SocketAsyncEventArgs objeto :

El autor de la llamada puede especificar opcionalmente un existente Socket que se va a usar para la conexión entrante especificando el que Socket se va a usar con la SocketAsyncEventArgs.AcceptSocket propiedad .

Si la SocketAsyncEventArgs.AcceptSocket propiedad es null, se construye un nuevo Socket con el mismo AddressFamily, SocketTypey ProtocolType que el actual Socket y se establece como la SocketAsyncEventArgs.AcceptSocket propiedad .

El autor de la llamada puede establecer la SocketAsyncEventArgs.UserToken propiedad en cualquier objeto de estado de usuario deseado antes de llamar al AcceptAsync método , de modo que la información se pueda recuperar en el método de devolución de llamada. Si la devolución de llamada necesita más información que un único objeto, se puede crear una clase pequeña para contener la otra información de estado necesaria como miembros.

Opcionalmente, se puede proporcionar un búfer en el que recibir el bloque inicial de datos en el socket después de que el ConnectAsync método se realice correctamente. En este caso, la SocketAsyncEventArgs.Buffer propiedad debe establecerse en el búfer que contiene los datos que se van a recibir y la SocketAsyncEventArgs.Count propiedad debe establecerse en el número máximo de bytes de datos que se van a recibir en el búfer. Estas propiedades se pueden establecer mediante el SocketAsyncEventArgs.SetBuffer método . Parte del búfer pasado se consumirá internamente para que lo use la llamada AcceptEx subyacente de Winsock. Esto significa que la cantidad de datos devueltos siempre será menor que el valor de la SocketAsyncEventArgs.Count propiedad en la System.Net.Sockets.SocketAsyncEventArgs instancia proporcionada. La cantidad del búfer utilizado internamente varía en función de la familia de direcciones del socket. El tamaño mínimo del búfer necesario es de 288 bytes. Si se especifica un tamaño de búfer mayor, Socket esperará algunos datos adicionales distintos de los datos de dirección recibidos por la llamada Winsock AcceptEx y esperará hasta que se reciban estos datos adicionales. Si se produce un tiempo de espera, se restablece la conexión. Por lo tanto, si se esperan datos adicionales de una cantidad específica, el tamaño del búfer debe establecerse en el tamaño mínimo del búfer más esta cantidad.

El método de devolución de llamada de finalización debe examinar la SocketAsyncEventArgs.SocketError propiedad para determinar si la AcceptAsync operación se realizó correctamente.

El SocketAsyncEventArgs.Completed evento puede producirse en algunos casos cuando no se ha aceptado ninguna conexión y hacer que la SocketAsyncEventArgs.SocketError propiedad se establezca ConnectionReseten . Esto puede producirse como resultado del examen de puertos mediante un examen de tipo SYN medio abierto (una secuencia SYN -> SYN-ACK -> RST). Las aplicaciones que usan el AcceptAsync método deben estar preparadas para controlar esta condición.

Consulte también

Se aplica a

AcceptAsync(CancellationToken)

Source:
Socket.Tasks.cs
Source:
Socket.Tasks.cs
Source:
Socket.Tasks.cs

Acepta una conexión entrante.

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)

Parámetros

cancellationToken
CancellationToken

Token de cancelación que se puede usar para cancelar la operación asincrónica.

Devoluciones

Tarea asincrónica que se completa con el socket aceptado.

Excepciones

Se ha solicitado una operación no válida. Esta excepción se produce si el Socket de aceptación no realiza escuchas para las conexiones o el socket aceptado está enlazado.

Debe llamar al método Bind(EndPoint) y Listen(Int32) antes de llamar al método AcceptAsync(SocketAsyncEventArgs).

Esta excepción también se produce si el socket ya está conectado o si ya hay una operación de socket en curso con el parámetro e especificado.

Error al intentar acceder al socket.

El Socket se ha cerrado.

Se canceló el token de cancelación. Esta excepción se almacena en la tarea devuelta.

Comentarios

Este método almacena en la tarea que devuelve todas las excepciones que no son de uso que puede producir el homólogo sincrónico del método. Si se almacena una excepción en la tarea devuelta, esa excepción se producirá cuando se espere a la tarea. Las excepciones de uso, como ArgumentException, se siguen produciendo de forma sincrónica. Para ver las excepciones almacenadas, vea las excepciones producidas por Accept().

Se aplica a

AcceptAsync(Socket, CancellationToken)

Source:
Socket.Tasks.cs
Source:
Socket.Tasks.cs
Source:
Socket.Tasks.cs

Acepta una conexión entrante.

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)

Parámetros

acceptSocket
Socket

Socket que se va a usar para aceptar la conexión.

cancellationToken
CancellationToken

Token de cancelación que se puede usar para cancelar la operación asincrónica.

Devoluciones

Tarea asincrónica que se completa con el socket aceptado.

Excepciones

Se ha solicitado una operación no válida. Esta excepción se produce si el Socket de aceptación no realiza escuchas para las conexiones o el socket aceptado está enlazado.

Debe llamar al método Bind(EndPoint) y Listen(Int32) antes de llamar al método AcceptAsync(SocketAsyncEventArgs).

Esta excepción también se produce si el socket ya está conectado o si ya hay una operación de socket en curso con el parámetro e especificado.

Error al intentar acceder al socket.

El Socket se ha cerrado.

Se canceló el token de cancelación. Esta excepción se almacena en la tarea devuelta.

Se aplica a