websocket send: make sure all data in the kernel buffer is sent
This commit is contained in:
		| @@ -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); | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -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; | ||||
|                                     }); | ||||
|                                 } | ||||
|                             } | ||||
|                         } | ||||
|   | ||||
| @@ -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; | ||||
|   | ||||
| @@ -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; | ||||
|                                     }); | ||||
|                                 } | ||||
|                             } | ||||
|                         } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user