Похоже, что функция 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);
}