Merge "Improve socket_vsock_proxy performance" into rvc-dev
diff --git a/common/frontend/socket_vsock_proxy/main.cpp b/common/frontend/socket_vsock_proxy/main.cpp
index a9e295f..c11852f 100644
--- a/common/frontend/socket_vsock_proxy/main.cpp
+++ b/common/frontend/socket_vsock_proxy/main.cpp
@@ -49,15 +49,15 @@
     }
   }
 
-  ssize_t SendAll(const std::vector<char>& packet) {
+  ssize_t SendAll(const char* packet, ssize_t length) {
     ssize_t written{};
-    while (written < static_cast<ssize_t>(packet.size())) {
+    while (written < length) {
       if (!socket_->IsOpen()) {
         return -1;
       }
       auto just_written =
-          socket_->Send(packet.data() + written,
-                        packet.size() - written, MSG_NOSIGNAL);
+          socket_->Send(packet + written,
+                        length - written, MSG_NOSIGNAL);
       if (just_written <= 0) {
         LOG(INFO) << "Couldn't write to client: "
                   << strerror(socket_->GetErrno());
@@ -82,13 +82,14 @@
   SocketReceiver(const SocketReceiver&&) = delete;
   SocketReceiver& operator=(const SocketReceiver&) = delete;
 
-  // *packet will be empty if Read returns 0 or error
-  void Recv(std::vector<char>* packet) {
-    auto size = socket_->Read(packet->data(), packet->size());
+  // return value will be 0 if Read returns 0 or error
+  ssize_t Recv(char* packet, ssize_t length) {
+    auto size = socket_->Read(packet, length);
     if (size < 0) {
       size = 0;
     }
-    packet->resize(size);
+
+    return size;
   }
 
  private:
@@ -97,10 +98,11 @@
 
 void SocketToVsock(SocketReceiver socket_receiver,
                    SocketSender vsock_sender) {
+  char packet[kMaxPacketSize] = {};
+
   while (true) {
-    std::vector<char> packet(kMaxPacketSize, '\0');
-    socket_receiver.Recv(&packet);
-    if (packet.empty() || vsock_sender.SendAll(packet) < 0) {
+    ssize_t length = socket_receiver.Recv(packet, kMaxPacketSize);
+    if (length == 0 || vsock_sender.SendAll(packet, length) < 0) {
       break;
     }
   }
@@ -109,13 +111,14 @@
 
 void VsockToSocket(SocketSender socket_sender,
                    SocketReceiver vsock_receiver) {
-  std::vector<char> packet(kMaxPacketSize, '\0');
+  char packet[kMaxPacketSize] = {};
+
   while (true) {
-    vsock_receiver.Recv(&packet);
-    if (packet.empty()) {
+    ssize_t length = vsock_receiver.Recv(packet, kMaxPacketSize);
+    if (length == 0) {
       break;
     }
-    if (socket_sender.SendAll(packet) < 0) {
+    if (socket_sender.SendAll(packet, length) < 0) {
       break;
     }
   }