daemon/socket: Read again when total size does not meet expected one
authorSangchul Lee <sc11.lee@samsung.com>
Tue, 9 May 2023 03:32:41 +0000 (12:32 +0900)
committer이상철/Tizen Platform Lab(SR)/삼성전자 <sc11.lee@samsung.com>
Wed, 10 May 2023 07:53:34 +0000 (16:53 +0900)
[Version] 0.1.8

Signed-off-by: Sangchul Lee <sc11.lee@samsung.com>
packaging/espp-service.spec
src/daemon/espp_service_socket.c

index 75ac6aae25131950997740d3866714bb1cf1a431..f32e933db33cfe8422d239b2f92b2bc7ca650d76 100644 (file)
@@ -1,6 +1,6 @@
 Name:       espp-service
 Summary:    ESPP service package which contains client lib. and daemon binary
-Version:    0.1.7
+Version:    0.1.8
 Release:    0
 Group:      Multimedia/Libraries
 License:    Apache-2.0
index 6bd5da0ebf919b33705d94c0c65f5dc4471f5134..49d0659cd9ab3263b584a60c823a522649cf35e6 100644 (file)
@@ -336,28 +336,35 @@ int espp_service_send_data(int fd, espp_service_data_from_server_s *data)
                return -1;
        }
 
+       LOG_DEBUG("fd[%d] event[%d]", fd, data->event);
+
        return 0;
 }
 
 int espp_service_read_buffer(int fd, char *buffer, uint32_t size)
 {
        int ret;
+       uint32_t total = 0;
        char str_error[MAX_ERROR_LEN] = {'\0',};
 
        ASSERT(fd >= 0);
        ASSERT(buffer);
 
-       if ((ret = read(fd, buffer, size)) < 0) {
-               strerror_r(errno, str_error, sizeof(str_error));
-               LOG_ERROR("failed to read(), fd[%d], err: %s", fd, str_error);
-               return -1;
-       }
+       do {
+               if ((ret = read(fd, buffer + total, size - total)) < 0) {
+                       strerror_r(errno, str_error, sizeof(str_error));
+                       LOG_ERROR("failed to read(), fd[%d], ret[%d], err: %s", fd, ret, str_error);
+                       break;
+               }
+               total += ret;
+       } while (total < size);
 
-       if ((uint32_t)ret != size) {
-               LOG_ERROR("failed to read(), fd[%d], read size mismatched: ret[%d], expect size[%u]",
-                       fd, ret, size);
+       if (total != size) {
+               LOG_ERROR("total[%u], expected size[%u]", total, size);
                return -1;
        }
 
+       LOG_DEBUG("fd[%d] buffer[%p, size:%u]", fd, buffer, size);
+
        return 0;
 }