Эта же проблема свела меня с ума, но, наконец, я исправил ее, и она работает. Это ошибка библиотеки сокетов MFC, которая в потоке [кроме основного потока приложения], если мы пытаемся сделать что-то вроде
CSocket socket;
socket.Create();
Будет выброшено необработанное исключение. Я нашел статью об этом Посмотрите, что Microsoft говорит об этом
, который сказал что-то от Microsoft, но это мне тоже не помогло. Итак, вот обходной путь, который я нашел, и я надеюсь, что он может помочь таким разочарованным парням, как я.
Внутри темы, сделайте это
CSocket mySock;
SOCKET sockethandle = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
mySock.m_hSocket= sockethandle;
После этого НЕ вызывайте mySock.Create, так как он был создан уже через присвоение дескриптора сокета. Я не уверен, что мы можем использовать mySock.Attach (sockethandle), так как я еще не пробовал.
После этого вы можете позвонить в Connect и т. Д. Напрямую.
Когда вы закончите использовать сокет, НЕ вызывайте mySock.Close()
- скорее вызовите closesocket(mySock.m_hSocket);
И это освободит объект сокета. Если Attach работает в вышеупомянутом случае, то я думаю, что нам нужно сделать Detach здесь, когда освободить сокет.
Удачи