From c88e65edf05f7e61826831a2f7528edbc184f68b Mon Sep 17 00:00:00 2001 From: Stefan Mititelu Date: Wed, 10 Feb 2021 17:19:05 +0200 Subject: [PATCH] rtpengine: rebuild sockets if any skipped nodes Retry build_rtpp_socks() if any DNS or create, bind, connect issues happened when kamailio started, and at least one node from list was skipped. This retry will happen automatically, when select_rtpp_node() is called and will avoid a need for a "kamcmd rtpengine.reload" --- src/modules/rtpengine/rtpengine.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/modules/rtpengine/rtpengine.c b/src/modules/rtpengine/rtpengine.c index 00b27be1487..8b751eb48a1 100644 --- a/src/modules/rtpengine/rtpengine.c +++ b/src/modules/rtpengine/rtpengine.c @@ -1794,6 +1794,9 @@ static int build_rtpp_socks(int lmode, int rtest) { if(_rtpe_list_vernum_local == _rtpe_list_version->vernum) { /* same version for the list of rtpengines */ + LM_DBG("same rtpengines list version: %d (%u)\n", + _rtpe_list_version->vernum, + (unsigned int)_rtpe_list_version->vertime); return 0; } @@ -1840,6 +1843,11 @@ static int build_rtpp_socks(int lmode, int rtest) { if (hostname==NULL) { LM_ERR("no more pkg memory\n"); rtpp_socks[pnode->idx] = -1; + + /* retry later */ + _rtpe_list_version->vernum += 1; + _rtpe_list_version->vertime = time(NULL); + continue; } strcpy(hostname, pnode->rn_address); @@ -1860,6 +1868,11 @@ static int build_rtpp_socks(int lmode, int rtest) { LM_ERR("%s\n", gai_strerror(n)); pkg_free(hostname); rtpp_socks[pnode->idx] = -1; + + /* retry later */ + _rtpe_list_version->vernum += 1; + _rtpe_list_version->vertime = time(NULL); + continue; } pkg_free(hostname); @@ -1869,6 +1882,11 @@ static int build_rtpp_socks(int lmode, int rtest) { if (rtpp_socks[pnode->idx] == -1) { LM_ERR("can't create socket\n"); freeaddrinfo(res); + + /* retry later */ + _rtpe_list_version->vernum += 1; + _rtpe_list_version->vertime = time(NULL); + continue; } @@ -1899,6 +1917,11 @@ static int build_rtpp_socks(int lmode, int rtest) { close(rtpp_socks[pnode->idx]); rtpp_socks[pnode->idx] = -1; freeaddrinfo(res); + + /* retry later */ + _rtpe_list_version->vernum += 1; + _rtpe_list_version->vertime = time(NULL); + continue; } @@ -1907,6 +1930,11 @@ static int build_rtpp_socks(int lmode, int rtest) { close(rtpp_socks[pnode->idx]); rtpp_socks[pnode->idx] = -1; freeaddrinfo(res); + + /* retry later */ + _rtpe_list_version->vernum += 1; + _rtpe_list_version->vertime = time(NULL); + continue; }