From b4b9519f950d2ad2341e96e813cdbd09a737c701 Mon Sep 17 00:00:00 2001 From: Ilho Kim Date: Tue, 31 May 2022 17:29:21 +0900 Subject: [PATCH] Add calling usleep() to avoid busy wating 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 --- src/common/socket/abstract_socket.cc | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/common/socket/abstract_socket.cc b/src/common/socket/abstract_socket.cc index 9ceca38..6cc9063 100644 --- a/src/common/socket/abstract_socket.cc +++ b/src/common/socket/abstract_socket.cc @@ -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; -- 2.7.4