Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Название темы: [решено] WinSock
Показать сообщение отдельно
pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Используешь асинхронную операцию на файлах и забываешь синхронизировать запись/чтение. Сделай двойную буфферизацию с синхронизацией или пиши синхронно:
Код: Выделить весь код
// Асинхронное с синхронизацией

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);
}

Отправлено: 07:58, 31-07-2009 | #2

Название темы: [решено] WinSock