Проблема следующая: имеется неблокирующий сокет, который связан с eventом посредством ф-ции WSAEventSelect так вот сама проблема. Когда я принимаю даные с локальной программы(POP3 сервера) то часть из них проглатывается ибо отсылает он нужный блок несколькоми пакетами и соответственно надо как-то это дело принять причем event срабатывает настолько быстро что сбрасывая текущее событие уже приходит новое и получается так что сбрасывается и следующее соответственно блок еще не принят а ф-ция WaitFoeMultipleEvents не срабатывает.
Вот мой кусок кода:
#define RECIEVE(buf,okstr)\
{\
buf[0]=0;\
stats=WaitForMultipleObjects(2,lpEvents,FALSE,m_timeout);\
switch(stats)\
{\
case WAIT_OBJECT_0: goto goto_on_stop;\
case WAIT_OBJECT_0+1 : ResetEvent(lpEvents[1]);\
break;\
default: goto goto_on_error;\
}\
iTmp = recv(s, buf, sizeof(buf), NULL);\
if (iTmp == SOCKET_ERROR)goto goto_on_error;\
buf[iTmp]=0;\
if (strstr(buf,okstr)==NULL)goto goto_on_error;\
}
может кто подскажет че-нить
[Win32] Поможите с сокетами19.07.01 04:58 Автор: ggg Статус: Незарегистрированный пользователь
если есть проблема в "неуспевании", то юзай AutoReset Event.
вот тут
> stats=WaitForMultipleObjects(2,lpEvents,FALSE,m_timeout); он поставит Event на Non-Signaled state.
а вообще подобного рода задача решается немного по другому. для этого есть очень полезная штука: WSAEnumNetworkEvents()
почитай об этом. он сделает тебе ресет, и еще вернет статус сокета.
удачи
[Win32] А я аот еще хотел спросить...19.07.01 11:05 Автор: Heromantor Статус: Незарегистрированный пользователь
> > Есть ли отличия WaitForMultipleObject И > > WSAWaitForMultipleEvents? А то инфы по этому вопросу я > > нашел очень мало. > > а с чего ты решил что они должны быть похожи ?