我有一个应用程序充当另一个应用程序的监视程序。看门狗的职责是监视主机应用程序的存在,并在其死时重新生成它。
下面是套接字代码:
sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sock < 0) {
return (-1);
}
int optval = 1;
struct timeval tv;
tv.tv_sec = SOC_READ_TIMEOUT;
tv.tv_usec = 0;
setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (char*) &tv, sizeof(tv));
tv.tv_sec = SOC_READ_TIMEOUT;
tv.tv_usec = 0;
setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (char*) &tv, sizeof(tv));
setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (int*) &optval,
sizeof(int));
name.sin_family = AF_INET;
name.sin_port = htons(port);
name.sin_addr.s_addr = htonl(INADDR_ANY);
if (bind(sock, (sockaddr *) &name, sizeof(name)) < 0) {
close(sock);
return (-1);
}
我面临的问题是,每当我杀死主机应用程序实例时。新实例给出错误“无法分配请求的地址”。我相信这是因为Raspbian操作系统不支持SO_REUSEPORT。
有什么办法可以解决吗?欢迎任何建议。
答案 0 :(得分:0)
谢谢,托尼和超级。似乎宿主应用程序由监视程序进程生成了多个实例,这就是问题发生的原因。解决了。