У меня есть программа, которая состоит из главного сервера и распределенных подчиненных серверов.Подчиненные серверы отправляют обновления статуса на сервер, и если сервер не получал известий от определенного подчиненного устройства в течение фиксированного периода, он помечает подчиненное устройство как отключенное.Это происходит последовательно.
Из проверки журналов я обнаружил, что ведомое устройство может только отправить одно обновление состояния на сервер, а затем никогда не может отправить другое обновление, всегда терпя неудачу при вызове connect () "Невозможно назначитьзапрашиваемый адрес (99).
Как ни странно, ведомое устройство может отправлять на сервер несколько других обновлений, и все соединения происходят на одном и том же порту. Похоже, что наиболее частая причина этого сбояэто то, что соединения остаются открытыми, но я не могу найти что-то оставленное открытым. Есть ли другие возможные объяснения?
Чтобы уточнить, вот как я подключаюсь:
struct sockaddr *sa; // parameter
size_t sa_size; //parameter
int i = 1;
int stream;
stream = socket(AF_INET,SOCK_STREAM,0);
setsockopt(stream,SOL_SOCKET,SO_REUSEADDR,&i,sizeof(i));
bindresvport(stream,NULL);
connect(stream,sa,sa_size);
Этокод находится в функции для получения соединения с другим сервером, и сбой при любом из этих 4 вызовов приводит к сбою функции.