Desbordamiento de pila cuando se usa el modelo System.Net.Sockets.Socket.AcceptAsync

Con respecto a C # y .NET'sSystem.Net.Sockets.Socket.AcceptAsync método, sería necesario manejar un valor de retorno de "falso" para manejar el inmediatamente disponibleSocketAsyncEventArgs estado de la conexión procesada sincrónicamente. Microsoft proporciona ejemplos (que se encuentran en elSystem.Net.Sockets.SocketAsyncEventArgs página de clase) que provocará un desbordamiento de la pila si hay una gran cantidad de conexiones pendientes, que pueden explotarse en cualquier sistema que implemente su modelo de manejo.

Otras ideas para solucionar este problema son hacer un bucle que llame al método del controlador, con la condición de que el valorSocket.AcceptAsync retornos es igual a falso, y romper el ciclo (para permitir el procesamiento diferido) si el valor indica que la operación se está completando de forma asincrónica (verdadero). Sin embargo, esta solución también causa una vulnerabilidad de desbordamiento de pila debido al hecho de que la devolución de llamada asociada con elSocketAsyncEventArgs pasó aSocket.AcceptAsync tiene al final del método, una llamada aSocket.AcceptAsync, que también tiene un bucle para conexiones disponibles de forma inmediata y aceptadas sincrónicamente.

Como puede ver, este es un problema bastante sólido, y aún no he encontrado una buena solución que no impliqueSystem.Threading.ThreadPool y creando toneladas de otros métodos y procesos de programación. Hasta donde puedo ver, el modelo de socket asíncrono relacionado conSocket.AcceptAsync requiere más de lo que se demuestra en los ejemplos en MSDN.

¿Alguien tiene una solución limpia y eficiente para manejar conexiones inmediatamente pendientes que son aceptadas sincrónicamente desde Socket.AcceptAsync sin crear subprocesos separados para manejar las conexiones y sin utilizar la recursividad?

Respuestas a la pregunta(4)

Su respuesta a la pregunta