return NULL;
}
memset(ipc_info, 0x00, sizeof(dp_ipc_fmt));
- ssize_t recv_size = read(sock, ipc_info, sizeof(dp_ipc_fmt));
- if (recv_size <= 0 || recv_size != sizeof(dp_ipc_fmt)) {
- TRACE_ERROR("socket read ipcinfo read size:%zd, errno:%d", recv_size, errno);
+
+ int errorcode = DP_ERROR_NONE;
+ int tryagain = 3;
+
+ do {
+ ssize_t recv_size = read(sock, ipc_info, sizeof(dp_ipc_fmt));
+ if (recv_size <= 0 || recv_size != sizeof(dp_ipc_fmt)) {
+ TRACE_ERROR("socket read ipcinfo read size:%zd, errno:%d", recv_size, errno);
+ errorcode = dp_ipc_check_stderr(errno);
+ } else {
+ errorcode = DP_ERROR_NONE;
+ }
+ } while (sock >= 0 && (errorcode == DP_ERROR_IO_EINTR) && (--tryagain > 0));
+
+ if (errorcode != DP_ERROR_NONE) {
+ TRACE_ERROR("Failed to read sock[%d]", sock);
free(ipc_info);
return NULL;
}
+
return ipc_info;
}