modelini kullanırken yığın taşması C# ve .NET'in System.Net.Sockets.Socket.AcceptAsync
yöntemiyle ilgili olarak, hemen kullanılabilir olan SocketAsyncEventArgs
durumunu işlemek için "false" değerinin geri getirilmesi gerekir. Eşzamanlı işlenmiş bağlantıdan. Microsoft (System.Net.Sockets.SocketAsyncEventArgs
sınıf sayfasında bulunan), taşıma modellerini uygulayan herhangi bir sistemde kullanılabilecek çok sayıda bekleyen bağlantı varsa yığın taşmasına neden olacak örnekler sağlar.System.Net.Sockets.Socket.AcceptAsync modeli
Bu soruna geçici bir çözüm bulmak için diğer fikirler, Socket.AcceptAsync
döndürme değerinin false değerine eşit olması koşuluyla ve (ertelenmiş işleme izin vermek için) değeri bozarsa, işleyici yöntemini çağıran bir döngü oluşturmaktır. işlemin eşzamansız olarak tamamlandığını gösterir (true). Bununla birlikte, bu çözüm aynı zamanda SocketAsyncEventArgs
ile ilişkili geri dönüşün Socket.AcceptAsync
'a aktarılan geridönüşümün, yöntemin sonunda, Socket.AcceptAsync
numaralı aramaya da sahip olduğu ve aynı zamanda anında kullanılabilir, eşzamanlı olarak kabul edilen bağlantılar için bir döngüye sahip olması nedeniyle yığın taşması güvenlik açığına neden olur .
Gördüğünüz gibi, bu oldukça sağlam bir sorundur ve henüz System.Threading.ThreadPool
'u içermeyen ve tonlarca başka yöntem ve zamanlama işlemi gerçekleştirmeyen iyi bir çözüm bulmuyorum. Görebildiğim kadarıyla, Socket.AcceptAsync
ile ilgili asenkron soket modeli, MSDN'deki örneklerde gösterilenden daha fazlasını gerektirir.
Bağlantıları yürütmek ve özyinelemeyi kullanmadan ayrı iş parçacıkları oluşturmaya gerek kalmadan, Socket.AcceptAsync tarafından eşzamanlı olarak kabul edilen hemen bekleyen bağlantıları işlemek için herkesin temiz ve verimli bir çözümü var mı?
Evet MSDN'deki örnekler (bu konuda, ya da en iyi uygulama) her zaman en iyi değildir. Sorunuzu açıklayabilir misiniz? StackOverflowExceptoin neden olmaz asyc soketleri ile çalışmak için bir yol mu arıyorsunuz? – Oded
Bu doğru; Hemen bekleyen bağlantıları işlemek için özyinelemeli bir yol arıyorum. –
Ayrıca bkz http://stackoverflow.com/questions/2002143/asynchronous-sockets-handling-false-socket-acceptasync-values – Lucero