Windows, асинхронный режим ASIO
От: Аноним  
Дата: 19.01.11 17:28
Оценка:
Привет,
в процессе написания класса сетевого клиента, столкнулся со следующей проблемой:
Я создаю сокет (pSocket = new...), вызываю async_connect(). Completion callback connect'а возвращает no error.
Вызываю асинхронное async_read_some() и, не дожидаясь, пока сработает callback read'а, закрываю сокет (пробовал по-разному — вызов socket.shutdown(shutdown_both), вызов socket.close()), затем уничтожаю объект сокета (delete pSocket);

После чего создаю сокет опять, и вызываю async_connect(). Completion callback в этот раз возвращает ошибку 995:
The I/O operation has been aborted because of either a thread exit or an application request

ну, понятно, что я отменил I/O operation, но ведь я закрыл сокет и создал совсем другой. Почему я получаю нотификацию об ошибке при открытии нового соединения?

Что-то подсказывает, что это особенность работы Windows IO Completion Ports (я в них не разбирался — мне дай бог с asio разобраться ), и эти Completion Ports привязываются к потоку, а не к сокету, но вроде ж так не должно себя вести.

В чем может быть проблема? И как правильно тогда сделать?
Спасибо!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.