websocket send: make sure all data in the kernel buffer is sent

This commit is contained in:
Benjamin Sergeant 2019-03-11 22:16:55 -07:00
parent d88bf16500
commit dedbeb3eab
4 changed files with 25 additions and 2 deletions

View File

@ -586,6 +586,12 @@ namespace ix
}
}
// Make sure we send all the buffered data ; there can be a lot of it
// for large messages.
// TODO / this will block the sending thread ; we need to eval whether
// this is the right fix
while (!isSendBufferEmpty()) sendOnSocket();
return WebSocketSendInfo(true, compressionError, payloadSize, wireSize);
}

View File

@ -64,7 +64,13 @@ namespace ix
{
if (client != webSocket)
{
client->send(str);
client->send(str,
[](int current, int total) -> bool
{
std::cerr << "Step " << current
<< " out of " << total << std::endl;
return true;
});
}
}
}

View File

@ -206,6 +206,11 @@ namespace ix
handleMessage(str);
_condition.notify_one();
}
else if (messageType == ix::WebSocket_MessageType_Fragment)
{
ss << "ws_receive: received fragment";
log(ss.str());
}
else if (messageType == ix::WebSocket_MessageType_Error)
{
ss << "Connection error: " << error.reason << std::endl;

View File

@ -63,7 +63,13 @@ namespace ix
{
if (client != webSocket)
{
client->send(str);
client->send(str,
[](int current, int total) -> bool
{
std::cerr << "Step " << current
<< " out of " << total << std::endl;
return true;
});
}
}
}