Здравствуйте, 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&ReceiveАвтор: butcher
Дата: 11.06.04
, эта ошибка будет произходить всегда при работе с неблокирующими сокетами, когда результат не может быть возвращён немедленно.