У меня есть приложение, которое выполняет функции сторожевого устройства для другого приложения. Обязанность сторожевого таймера состоит в том, чтобы отслеживать существование хост-приложения и повторно вызывать его всякий раз, когда оно умирает.
Ниже приведен код сокета:
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 OS не поддерживает SO_REUSEPORT.
Есть ли способ, я могу решить это? Любое предложение приветствуется.