Добрый день уважаемые посетители конференции. Столкнулся с такой проблемой: В общем решил наклепать чат на фасме с использованием неблокирующих сокетов и UDP. Затея удалась, но все работает только под WinNT 5.0 или старше (проверял на Win XP и Win2k). А вот на Win98 и WinNT 4.0 WSAAsyncSelect заканчивается с 0xFFFF в ЕАХ и кодом ошибки WSAEINVAL. При этом отправка работает нормально. Короче говоря сокет не переходит в неблокирующий режим, но продолжает работать, например если вручную вызвать команду recvfrom, то данные из буфера будут считаны. В общем буду благодарен если поможете разобраться с сложившейся ситуацией. Вот кусок кода: Код (Text): invoke WSAStartup,101h,wsdata … invoke WSASocket,AF_INET,SOCK_DGRAM,IPPROTO_UDP,0,0,0 mov [hSock],EAX … invoke bind,[hSock],saddr_l,16 … invoke WSAAsyncSelect,[hSock],[hDlg],WM_SOCK,FD_READ Кратко о самой проге: Для отправки регистрирется хоткей (Ctrl+Enter), вторая копия программы не сможет получить хоткей, но продолжит работать на прием. Можно запустить одну копию и самому себе на один и тотже порт слать сообщения. Прога прилагается с исходниками… 698774654__wsock.rar
Посмотрим... WSAEINVAL - Получен недопустимый аргумент. Что-то мне подсказывает, что тебе лучше использовать WSAEventSelect.
Vasil Щас вот переделываю под EventSelect... Кстати, а мона использовать евенты созданные CreateEvent, а не WSACreateEvent? (для функции WSAEventSelect разумеется)
Puncher Естественно можно (врядли бы микрософт изобретал велосипед (хотя ой как могйт)), достаточно посмотреть в том же олли Код (Text): push 0 push 0 push 1 push 0 call CreateEvent Еще момент. Работаю с сокетами год гдето. За это время понял что лучше блокирующих, тех первых (Беркли кажется) нету. Так же мне больше нравится ф-я select чем привязка к событиям.
Corleone Ага правильно! Для EventSelect нужен евент с ручным сбросом, в MSDN так и написано, что WSACreateEvent это и есть обычный евент с мануальным сбросом... Кстати мне тоже WSAAsyncSelect показался более удобным, чем EventSelect. Программу всетаки пересадил на EventSelect, в 98-й работает. Осталось пару глюков отловить... Спасибо всем !
Я имел ввиду ф-ю select Поясню почему мне она больше нравится чем событийная или ассинхронная модели. Я писал SOCKS-сервер, и заметил что при серфинге ч-з браузер страницы грузятся не до конца. То что я правильно написал рабочий тред - сомнения у меня не вызывало, в общем иногда не приходили сообщения FD_CLOSE, как я потом вичислил. Перевел же все на селект, во первых код уменьшил с 2,5 кб до 1027 байт, во вторых обмен данными на соксе происходит в полном объеме. С тех пор события использую только если ч-з сокеты не идут тонны данных, WSAAsyncSelect - всего использовал пару раз (ну полная лажа!)