Асинхронная работа с сокетами
От: ilya39  
Дата: 24.05.06 13:02
Оценка:
По пытался написать асинхронно работающий на сокетах сервер. Код в основном взял из: https://www.microsoft.com/Rus/Msdn/Magazine/2005/08/Winsock.mspx раздел "Асинхронный ввод-вывод"(впрочем практически аналогичное у меня получилось до чтения этого материала, после изучения help-а).

Столкнулся со следующей проблемой.

В методах AcceptCallback, ReceiveCallback, которые вызываются по завершении асинхронных операций BeginAccept и BeginReceive соответственно, используются сокеты так или иначе полученые IAsyncResult.AsyncState.

При закрытии сокетов (Socket.Close) (серверного сокета и сокетов созданных при получении входящего соединения от клиентов) методы AcceptCallback, ReceiveCallback вызываются, но сокет полученный из IAsyncResult.AsyncState уже закрыт, соответственно получаю исключение System.ObjectDisposedException: Cannot access a disposed object.

Конечно можно обойти эту проблему, использовать какой либо доп. флаг и т.д. и т.п.

Но хотелось бы узнать может есть какое-либо более оригинальное решение или подход...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.