MCPcopy Create free account
hub / github.com/Snapchat/KeyDB / changeBindAddr

Function changeBindAddr

src/server.cpp:6687–6751  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

6685}
6686
6687int changeBindAddr(sds *addrlist, int addrlist_len, bool fFirstCall) {
6688 int i;
6689 int result = C_OK;
6690
6691 char *prev_bindaddr[CONFIG_BINDADDR_MAX];
6692 int prev_bindaddr_count;
6693
6694 /* Close old TCP and TLS servers */
6695 closeSocketListeners(&serverTL->ipfd);
6696 closeSocketListeners(&serverTL->tlsfd);
6697
6698 /* Keep previous settings */
6699 prev_bindaddr_count = g_pserver->bindaddr_count;
6700 memcpy(prev_bindaddr, g_pserver->bindaddr, sizeof(g_pserver->bindaddr));
6701
6702 /* Copy new settings */
6703 memset(g_pserver->bindaddr, 0, sizeof(g_pserver->bindaddr));
6704 for (i = 0; i < addrlist_len; i++) {
6705 g_pserver->bindaddr[i] = zstrdup(addrlist[i]);
6706 }
6707 g_pserver->bindaddr_count = addrlist_len;
6708
6709 /* Bind to the new port */
6710 if ((g_pserver->port != 0 && listenToPort(g_pserver->port, &serverTL->ipfd, (cserver.cthreads > 1), fFirstCall) != C_OK) ||
6711 (g_pserver->tls_port != 0 && listenToPort(g_pserver->tls_port, &serverTL->tlsfd, (cserver.cthreads > 1), fFirstCall) != C_OK)) {
6712 serverLog(LL_WARNING, "Failed to bind, trying to restore old listening sockets.");
6713
6714 /* Restore old bind addresses */
6715 for (i = 0; i < addrlist_len; i++) {
6716 zfree(g_pserver->bindaddr[i]);
6717 }
6718 memcpy(g_pserver->bindaddr, prev_bindaddr, sizeof(g_pserver->bindaddr));
6719 g_pserver->bindaddr_count = prev_bindaddr_count;
6720
6721 /* Re-Listen TCP and TLS */
6722 serverTL->ipfd.count = 0;
6723 if (g_pserver->port != 0 && listenToPort(g_pserver->port, &serverTL->ipfd, (cserver.cthreads > 1), false) != C_OK) {
6724 serverPanic("Failed to restore old listening sockets.");
6725 }
6726
6727 serverTL->tlsfd.count = 0;
6728 if (g_pserver->tls_port != 0 && listenToPort(g_pserver->tls_port, &serverTL->tlsfd, (cserver.cthreads > 1), false) != C_OK) {
6729 serverPanic("Failed to restore old listening sockets.");
6730 }
6731
6732 result = C_ERR;
6733 } else {
6734 /* Free old bind addresses */
6735 for (i = 0; i < prev_bindaddr_count; i++) {
6736 zfree(prev_bindaddr[i]);
6737 }
6738 }
6739
6740 /* Create TCP and TLS event handlers */
6741 if (createSocketAcceptHandler(&serverTL->ipfd, acceptTcpHandler) != C_OK) {
6742 serverPanic("Unrecoverable error creating TCP socket accept handler.");
6743 }
6744 if (createSocketAcceptHandler(&serverTL->tlsfd, acceptTLSHandler) != C_OK) {

Callers 1

configSetCommandFunction · 0.85

Calls 7

closeSocketListenersFunction · 0.85
zstrdupFunction · 0.85
listenToPortFunction · 0.85
serverLogFunction · 0.85
zfreeFunction · 0.85
redisSetProcTitleFunction · 0.85

Tested by

no test coverage detected