Привет,
в процессе написания класса сетевого клиента, столкнулся со следующей проблемой:
Я создаю сокет (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 привязываются к потоку, а не к сокету, но вроде ж так не должно себя вести.
В чем может быть проблема? И как правильно тогда сделать?
Спасибо!