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);
 | 
					        return WebSocketSendInfo(true, compressionError, payloadSize, wireSize);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -64,7 +64,13 @@ namespace ix
 | 
				
			|||||||
                            {
 | 
					                            {
 | 
				
			||||||
                                if (client != webSocket)
 | 
					                                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);
 | 
					                    handleMessage(str);
 | 
				
			||||||
                    _condition.notify_one();
 | 
					                    _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)
 | 
					                else if (messageType == ix::WebSocket_MessageType_Error)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    ss << "Connection error: " << error.reason      << std::endl;
 | 
					                    ss << "Connection error: " << error.reason      << std::endl;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -63,7 +63,13 @@ namespace ix
 | 
				
			|||||||
                            {
 | 
					                            {
 | 
				
			||||||
                                if (client != webSocket)
 | 
					                                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