Используешь асинхронную операцию на файлах и забываешь синхронизировать запись/чтение. Сделай двойную буфферизацию с синхронизацией или пиши синхронно:
Код:
// Асинхронное с синхронизацией
char mem[0x2000];
OVERLAPPED ovlp[2];
...
char *buf1=mem, *buf2=mem+0x1000;
for(bool is_active = true; is_active; std::swap(buf1, buf2))
{
int ret = recv(sock, buf1, 0x1000, 0);
...
// т.к. ovlp.hEvent=0 при попытке записать что-то в файл одновременно
// (в разные концы файла например), могут происходить неверные срабатывания
// функции GetOverlappedResult. SDK рекомендует использовать hEvent
unsigned long dw_transferred = 0;
GetOverlappedResult(hFile, &ovlp, &dw_transferred, true);
WriteFile(hFile, recvBuff, strlen(buf1), 0, &ovlp);
}
// синхронное
for(bool is_active = true; is_active;)
{
int ret = recv(sock, buf, 0x1000, 0);
...
unsigned long dw_transferred = 0;
WriteFile(hFile, recvBuff, strlen(buf), &dw_transferred, 0);
}