WSACleanUp вызывает исключение - PullRequest
0 голосов
/ 16 февраля 2009

Мое приложение может переключаться между последовательными и сокетными соединениями, но ни одно из них не может быть открыто одновременно. Поэтому, когда я пытаюсь переключиться между Socket и Serial, я удаляю соединение Socket.

В объекте на основе сокетов используется закрытый класс UsesWinsock (большой призыв к Len Holgate здесь, поскольку это в основном его код (на самом деле это RAII, но я никогда не применял его к WSA, пока не увидел его сделай это)). Это просто вызывает WSAStart и WSACleanUp.

Когда вызывается WSACleanUp, он переходит в NTDLL и ассемблер. @ err, hr дает мне "Область данных, переданная системному вызову, слишком мала", как HRESULT.

Я попытался переместить код: перемещение класса в порядке его наследования приводит к изменению последовательности уничтожения и фактически нарушает функции, чтобы они были последними вызовами в последовательности уничтожения. Ни один не работал.

Я почти уверен, что освободил все, что выделено (есть только 1 сокет и пара событий), и я застрял - это довольно важная проблема для меня.

Google бесполезен, возвращая 4 результата, из которых ни один не решает мою проблему .

Есть предложения?

Ответы [ 2 ]

1 голос
/ 16 февраля 2009

Итак, вы используете мой класс UsesWinsock как есть? То есть ты говоришь, что он сломан? Если так, то электронное письмо напрямую ко мне может быть более эффективным способом решения проблемы;)

Я заметил, что мой код на самом деле не проверяет код возврата из WSACleanUp () в dtor, поэтому я предполагаю, что вы проверяете это, это SOCKET-ERROR, а WSAGetLastError () сообщает об ошибке ?

0 голосов
/ 17 февраля 2009

Мне было бы интересно узнать, что вы найдете, если вы используете вес команда «проследить и посмотреть» в отладчике windows:

Установите точку останова в начале WSACleanup:

bp ws2_32!wsacleanup

После попадания введите команду трассировки:

wt -oa -oR @$ra

и следите за звонками в ntdll! RtlSetLastWin32Error

Вы также можете опубликовать результаты здесь, было бы интересно посмотреть на них.

...