![]() |
Модераторы: gambit |
![]() ![]() ![]() |
|
FREEDEV |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 238 Регистрация: 6.3.2007 Где: Украина->Одесс а Репутация: нет Всего: 3 |
Создаю асинхронный сервер, вот часть кода:
Проблема заключается в том, что при попытке закрыть сокет методом _serverSocket.Close происходит вызов AcceptCallback с параметром отличным от Socket, что естественно выкидывает в обработчик исключения. Кто-то встречался с такой штукой, почемуу происходит попытка соединения по закрытию сокета, кем она инициирована --------------------
Microsoft Windows Visla © |
|||
|
||||
stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 1 Всего: 48 |
ну дык, а какое исключение? тут не телепаты собираются )
_serverSocket.Close когда вызывается? точнее, после вызова Start() что происходит дальше? -------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
tol05 |
|
||||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 6 Всего: 170 |
1. Что такое ConnectionInfo ?
2. у меня написало "Cannot access a disposed object." Что вполне логично, т.к. Close() у сокета вызывает Dispose() Я бы вообще не использовал AcceptCallback() и EndAccept(), а писал бы
Или использовал, но добавил бы булев флаг (аналог bool disposed) в AcceptCallback() и после вызова close() его устанавливал, а в AcceptCallback() - проверял его наличие
тобой. Socket.EndAccept(...)
http://msdn.microsoft.com/library/rus/defa...accepttopic.asp -------------------- На хорошей работе и сны хорошие снятся. |
||||||||
|
|||||||||
FREEDEV |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 238 Регистрация: 6.3.2007 Где: Украина->Одесс а Репутация: нет Всего: 3 |
да именно это исключение и происходит.
имелось ввиду, почему я вообще попадаю в AcceptCallback, если никто не просится соединиться, единственный раз когда я туда захожу это после вызова Close(); далее уже EndAccept выпадает в ObjectDisposedException т.к. сокет закрыт С флагом это ясное дело, но пока оставлю на закуску, т.к. это не совсем правильный вариант - хочется разобраться в проблемме. Пытался проверить на _serverSocket.IsBound , но он всегда тру Целью всех манипуляций является попытка отрубить сокет, а потом заново привязать его , но например уже к другому порту. Пример честно содран отсюда http://www.microsoft.com/Rus/Msdn/Magazine...08/Winsock.mspx Это сообщение отредактировал(а) FREEDEV - 28.6.2007, 12:30 --------------------
Microsoft Windows Visla © |
|||
|
||||
tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 6 Всего: 170 |
Потому что это сделано намеренно!
Если ты начинаешь выполнять любую операцию асинхронно, ты вызываешь метод BeginXXX, отдаешь ему делегат обратного вызова и надеешься на винду полностью. Она сообщит тебе колбеком об окончании и даст резуьтат. Правильно? А если что-то случилось в винде? Если сбой, ошибка? Все пропало и никто ничего не понял... Как потом, после всего этого винде доверять? ![]() Поэтому сделано так (причем для любых асинхронных операций, потоковых чтения\записи, Invoke, вообще для всего APM-ного):
Рихтер. "C# via .Net.djvu" Модель АРМ и исключения. когда ты вызываешь Close() (или Dispose()) для твоего сокета, асинхронный поток прерывается. Потоки прерываются, создавая (как известно) исключение ThreadAbortException. Ну, а дальше - читай текст выше ![]() Это сообщение отредактировал(а) tol05 - 28.6.2007, 12:50 -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
FREEDEV |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 238 Регистрация: 6.3.2007 Где: Украина->Одесс а Репутация: нет Всего: 3 |
Спасибо, теперь ясно, до Рихтера просто еще не добрался
--------------------
Microsoft Windows Visla © |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Распределённые приложения и сеть | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |