Stack-Überlauf bei Verwendung des Modells System.Net.Sockets.Socket.AcceptAsync

it Bezug auf C # und .NET'sSystem.Net.Sockets.Socket.AcceptAsync -Methode müsste man einen Rückgabewert von "false" verarbeiten, um das sofort verfügbareSocketAsyncEventArgs Status von der synchron verarbeiteten Verbindung. Microsoft liefert Beispiele (zu finden auf demSystem.Net.Sockets.SocketAsyncEventArgs class page), der bei einer großen Anzahl anstehender Verbindungen einen Stapelüberlauf verursacht und auf jedem System ausgenutzt werden kann, das sein Handhabungsmodell implementiert.

Weitere Möglichkeiten, um dieses Problem zu umgehen, bestehen darin, eine Schleife zu erstellen, die die Handlermethode aufruft, mit der Bedingung, dass der WertSocket.AcceptAsync return ist gleich false und um die Schleife zu unterbrechen (um eine verzögerte Verarbeitung zu ermöglichen), wenn der Wert angibt, dass die Operation asynchron abgeschlossen wird (true). Diese Lösung führt jedoch auch zu einer Sicherheitsanfälligkeit durch Stapelüberlauf, da der mit dem @ verknüpfte RückrSocketAsyncEventArgs weitergereicht anSocket.AcceptAsync hat am Ende der Methode einen Aufruf vonSocket.AcceptAsync, das auch eine Schleife für sofort verfügbare, synchron akzeptierte Verbindungen hat.

Wie Sie sehen können, ist dies ein ziemlich solides Problem, und ich habe noch keine gute Lösung gefunden, bei der es nicht um @ gehSystem.Threading.ThreadPool und Tonnen von anderen Methoden erstellen und Verarbeitung planen. Soweit ich sehen kann, bezieht sich das asynchrone Socket-Modell aufSocket.AcceptAsync erfordert mehr als das, was in den Beispielen auf MSDN gezeigt wird.

Hat jemand eine saubere und effiziente Lösung, um sofort ausstehende Verbindungen, die synchron von Socket akzeptiert werden, zu verarbeiten. Akzeptieren Sie Async, ohne separate Threads für die Verarbeitung der Verbindungen zu erstellen und ohne Rekursion?

Antworten auf die Frage(8)

Ihre Antwort auf die Frage