Есть сервер который принимает от клиента имя и пароль.
Сначала принимается идентификатор сообщения id, потом происходит обработка.
Если перед приемом имя и пароля поставить Sleep(1000), то сервер
нормально принимает данные.
Используются ассинхронные сокеты. WSASelect
Вы писали 26 февраля 2004 г., 15:14:08:
R> Есть сервер который принимает от клиента имя и пароль. R> Сначала принимается идентификатор сообщения id, потом происходит обработка. R> Если перед приемом имя и пароля поставить Sleep(1000), то сервер R> нормально принимает данные. R> Используются ассинхронные сокеты. WSASelect
а если не ставить Sleep, то recv возвращает ошибку, наверно 10035?
да?
--
С уважением, butcher
Ruslan_Bezrodny wrote:
> Есть сервер который принимает от клиента имя и пароль. > Сначала принимается идентификатор сообщения id, потом происходит обработка. > Если перед приемом имя и пароля поставить Sleep(1000), то сервер > нормально принимает данные. > Используются ассинхронные сокеты. WSASelect
Код ошибки при приеме сокет WSAEWOULDBLOCK. как обойти это.
> Вы писали 26 февраля 2004 г., 15:26:08: > > R> Код ошибки при приеме сокет WSAEWOULDBLOCK. как обойти это. > > 1. используя перекрытый ввод-вывод. > 2. как рекомендуют в MSDN прочитать данные, сбросить событие и в > следующий раз прочитать все остальные..
Что значит сбросить событие?
Механизм работы клиента и сервера таков:
После соединения клиент шлет:
const char msg_login = 0x01;
std::sting login;
std::sting password;
//заполнение login и password dialog
char id = msg_login; soc->send(id); soc->send(login); soc->send(password);
Server на WSA_NETEVENT обрабатывает сообщения
case FD_READ:
{
Socket* read = (Socket*)FindSocket( (SOCKET)wp );
if( read ){
MsgID msg_id; read->Recv( msg_id );
//------------- messages processing ---------
switch( msg_id ){
case MSGID_CONNECT:
MSGConnect( read );
break;
//...
}
}
//Эта функция принимает имя и пароль от клиента
void MSGConnect( Socket* soc )
{
string login;
string psw; soc->Recv( login ); soc->Recv( psw );
}
Как организовать прием и пересылку, чтобы избавиться от WSAEWOULDBLOCK
при приеме данных?
Posted via RSDN NNTP Server 1.8 beta
Re[4]: Проблема с приемом на сервере
От:
Аноним
Дата:
01.03.04 11:01
Оценка:
Здравствуйте, Ruslan_Bezrodny, Вы писали:
R_B>Как организовать прием и пересылку, чтобы избавиться от WSAEWOULDBLOCK R_B>при приеме данных?
Вы писали 1 марта 2004 г., 14:01:01:
R_B>>Как организовать прием и пересылку, чтобы избавиться от WSAEWOULDBLOCK R_B>>при приеме данных?
> Используй синхронные сокеты.