Re[6]: CancelIoEx вешает программу
От: acDev Россия  
Дата: 30.07.13 09:49
Оценка:
D>Попробовал воспроизвести у себя — не получилось (10 минут на Win7 SP1 + all updates).

Наврал! Воспроизводится в 100% случаев.

Если переписать код с правильным разбором ошибок (как написано в MSDN), то уже не воспроизводится:
  for(;;) {
    WSABUF b;
    b.buf = (char*)buf;
    b.len = recvbuf;
    DWORD recv = 0, flags = 0;
    int res = WSARecv(c, &b, 1, &recv, &flags, &ol, 0);
    if (res == 0) 
      break;
    if (res != SOCKET_ERROR)
      panic("WSARecv return NAN");
    DWORD dwErr = WSAGetLastError();
    if (dwErr != WSA_IO_PENDING)
      panic("WSARecv not PENDING");
    BOOL ret = WSAGetOverlappedResult(c, &ol, &recv, TRUE, &flags);
    if (!ret) {
      if(GetLastError() == WSA_OPERATION_ABORTED)
        break;
      panic("WSAGetOverlappedResult");
    }
  }
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.