Re[7]: CAsyncSocket&Receive
От: butcher Россия http://bu7cher.blogspot.com
Дата: 15.06.04 04:04
Оценка:
Здравствуйте, zaxs, Вы писали:

Z>Здравствуйте, butcher. Сделал обработку ошибок:

Z>while (BufLen>0)
Z>{
Z> Sleep(100);
Z> BufLen=ServerSocket.Receive(lpBuf,65536,0);
Z>// tema.Format("%d",BufLen);
Z>// AfxMessageBox(tema);

Z> // write to the file

Z> if (BufLen<=0)
Когда функция Receive возвращает 0 — это означает, что соединение закрыто с "той" стороны, это не ошибка и это нужно обрабатывать соответсвующим образом.

Z> {

Z> equal_flag=ServerSocket.GetLastError();
Z> SetLastError(10000);
Z>// equal_flag=ServerSocket.GetLastError();
Z> if(equal_flag==WSAEWOULDBLOCK)
Z> {
Z> BufLen=1;
Z> continue;
Z> }
Z> break;
Z> }
Z> fletter.Write(lpBuf,BufLen);
Z>}

Z>только очередная засада: даже когда данные кончаются все равно выдается ошибка WSAEWOULDBLOCK. Думал что он запомнил последнюю ошибку и не обновляет ее поэтому вставил строку: SetLastError(10000); но все равно продолжает генерироваться такая ошибка.

Я же говорю, в Re[3]: CAsyncSocket&amp;Receive
Автор: butcher
Дата: 11.06.04
, эта ошибка будет произходить всегда при работе с неблокирующими сокетами, когда результат не может быть возвращён немедленно.

Нет ничего невозможного..
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.