Add calling usleep() to avoid busy wating 44/275744/3
authorIlho Kim <ilho159.kim@samsung.com>
Tue, 31 May 2022 08:29:21 +0000 (17:29 +0900)
committerIlho Kim <ilho159.kim@samsung.com>
Thu, 2 Jun 2022 00:59:55 +0000 (09:59 +0900)
If the socket is non-blocking mode, while loop can make busy wating
To avoid busy wating, this patch adds calling usleep() with 100 ms

Change-Id: Id4c17e2f8e403ebfe17ae903fa1f4ccb86822c58
Signed-off-by: Ilho Kim <ilho159.kim@samsung.com>
src/common/socket/abstract_socket.cc

index 9ceca38..6cc9063 100644 (file)
@@ -61,6 +61,7 @@ int AbstractSocket::SendData(const void* buf, unsigned int size) {
 
 int AbstractSocket::ReceiveData(void* buf, unsigned int size) {
   bool is_blocking = true;
+  int retry_count = 20;
 
   if (fcntl(fd_, F_GETFL, 0) & O_NONBLOCK)
     is_blocking = false;
@@ -82,7 +83,14 @@ int AbstractSocket::ReceiveData(void* buf, unsigned int size) {
           return -errno;
         }
 
-        continue;
+        if (retry_count > 0) {
+          LOG(WARNING) << "Fail to receive data from "
+              << "non-blocking socket retry count : " << retry_count
+              << " left byte : " << left << " receive byte : " << recv_byte;
+          usleep(100 * 1000);
+          retry_count--;
+          continue;
+        }
       }
 
       LOG(ERROR) << "recv() is failed. fd: " << fd_ << ", errno: " << errno;