TCP неблокирующая потеря пакетов сокетов - PullRequest
0 голосов
/ 29 сентября 2019

Похоже, что функция send() в этом случае работает намного быстрее, чем recv(), а recv() никогда не достигает 262144 байта.Я не хочу использовать блокирующие сокеты, так как есть много сообщений, которые должны быть обработаны обратным вызовом MsgPoc(), есть идеи, как это исправить?

// peer 1
char buff[262144]; // 265 kb

LRESULT CALLBACK MsgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
        //...
    case WM_SOCKET:     // #define WM_SOCKET (WM_USER + 1)
        switch (WSAGETSELECTEVENT(lParam))
        {
        case FD_READ:
        {
            nBytes += recv(sock, buff, 262144, 0); // always receiving 5840 bytes max
            fwrite(buff, 1, 262144, file);            
            break;
        }
        //...
    }
    return 0;
}

// peer 2 sends packets from the main loop
while (GetMessage(&msg, nullptr, 0, 0))
{
    TanslateMessage(&msg);
    DispatchMessage(&msg);

    fread(buff, 1, 262144, file);
    nBytes += send(sock, buff, 262144, 0);
}
...