void QaSProtocolServer::serverCore() { boost::asio::ip::udp::socket socket(ioService, boost::asio::ip::udp::endpoint(boost::asio::ip::udp::v4(), m_serverPort)); boost::asio::streambuf sb; boost::asio::streambuf::mutable_buffers_type mutableBuf = sb.prepare(sizeof(MSG_T)); size_t receivedBytes = socket.receive_from(mutableBuf, clientEndpoint); sb.commit(receivedBytes); std::istream is(&sb); uint8_t msg_type; is.read((char*)&msg_type, sizeof(msg_type)); uint64_t key; is.read((char*)&key, sizeof(key)); sb.consume(receivedBytes); std::ostream os(&sb); CITE_MSG_T replyMsg; std::vector quoteParts; try { quoteParts = prepareQuote(replyMsg); } catch (QaSProtocolServerException& e) { sendServerErrMsg(socket, clientEndpoint); return; } uint16_t index = 0; replyMsg.msg_id = 2; replyMsg.key = key; replyMsg.text.data = NULL; BOOST_FOREACH(std::string quotePart, quoteParts) { replyMsg.index = htons(index++); if (replyMsg.text.data != NULL) { delete[] replyMsg.text.data; } replyMsg.text.data = new char[quotePart.size()]; strcpy(replyMsg.text.data, quotePart.c_str()); replyMsg.text.data_length = strlen(replyMsg.text.data); qDebug() << replyMsg.text.data_length; os.write((char*)&replyMsg, sizeof(replyMsg) - sizeof(replyMsg.text.data)); os.write(replyMsg.text.data, strlen(replyMsg.text.data)); size_t sent_bytes = socket.send_to(sb.data(), clientEndpoint); sb.consume(sent_bytes); } socket.close(); }