free(data);
free(type_name);
+
+ int ret = 0;
+ ssize_t send_byte = send(clifd, &ret, sizeof(ret), MSG_NOSIGNAL);
+ if (send_byte < 0)
+ LOGE("send() is failed. fd: %d, errno: %d", fd, errno);
+
close(clifd);
/* renew timeout */
if (r < 0)
return -1;
+ LOGW("signal agent start");
+
g_main_loop_run(loop);
__fini();
#include "control.hh"
+#include <fcntl.h>
#include <getopt.h>
#include <sys/socket.h>
#include <sys/types.h>
constexpr int OPTVAL_RECOVER_DB = 1008;
constexpr int OPTVAL_RECOVERY_CLEANUP = 1009;
+constexpr int AGENT_TIMEOUT = 3000;
+
constexpr const char short_opts[] = "k:l:i:d:c:m:t:o:r:p:s:b:e:M:y:u:w:D:A:qGS";
constexpr const struct option long_opts[] = {
{ "session-id", 1, nullptr, 'k' },
return -1;
}
+ int flags = fcntl(fd, F_GETFL, 0);
+ if (fcntl(fd, F_SETFL, (flags & (~SOCK_NONBLOCK))) != 0) {
+ _E("Failed to set flags: %d on fd: %d, errno: %d", flags, fd, errno);
+ close(fd);
+ return 0;
+ }
+
+ struct timeval timeout = {
+ .tv_sec = static_cast<time_t>(AGENT_TIMEOUT / 1000),
+ .tv_usec = static_cast<suseconds_t>((AGENT_TIMEOUT % 1000) * 1000)};
+
+ if (setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout)) < 0)
+ _E("setsockopt() is failed. fd: %d, errno: %d", fd, errno);
+
+ int ret;
+ ssize_t recv_byte = recv(fd, &ret, sizeof(ret), 0);
+ if (recv_byte <= 0)
+ _E("recv() is failed. recv_vypte : %d, fd: %d, errno: %d",
+ recv_byte, fd, errno);
+
close(fd);
return 0;