Добрый день всем! Мистика какая-то творится. При вызове socket(AF_INET,SOCK_STREAM,IPPROTO_TCP) получаю INVALID_SOCKET и GetLastError = 10038 (WSAENOTSOCK, чего быть не может в принципе по определению, т.к. объект "сокет" только создается). Предыстория такая: 1. Основной код тулзы на асме 2. Доп. либа сишная, скомпиленная в VS6 3. Мистика случается в дополнительном потоке, создаваемом тулзой, в коде сишной либы. Причем, что интересно: 1. Вызываю socket с теми же параметрами в коде тулзы - все ОК, стоит сразу после этого сделать call в сишную либу и вызвать socket с теми же параметрами там - INVALID_SOCKET. 2. Трассировал падающий вызов, спотыкается уже где-то на этапе обращения к AFD, внутри mswsock (получает 80000002 - STATUS_DATATYPE_MISALIGNMENT), затем устанавливает LastError в 10022 (2726h - invalid parameter, кажется), а на выходе устанавливает 10038. Не сталкивался ли кто с такой мистикой? Как решать, не знаю уже.
Это не мистика, а ошибка "socket operation on nonsocket". Юзай критические секции/interlocked-функции
riban Я знаю, что такое WSAENOTSOCK - но в MSDN такого статуса (вменяемого) для функции socket нет. Критические секции здесь не при чем (читай п.3 предыстории - там в дополнительном потоке это происходит и в коде статической либы, тогда как в основном коде тулзы создаются по 300-500 потоков и параллельно нормально работают каждый со своим сокетом).
ECk Про потоки в основной тулзе ты ничего не писал. Дык может либа кривая? Архитектура не та или ещё чего? У меня так было пару раз - 2е суток потерял
Я на такую лажу натыкался c файлами работал)))) Стек приходится по всей программе выравнивать, иначе любая функция винды тожет глюкнуть. Притом происходить это будет через раз, один раз откопмилил не сработала, второй раз откомпилил, пашет. Т.е. ты можешь даже не заметить проблему...