MCPcopy Create free account
hub / github.com/F-Stack/f-stack / changeBindAddr

Function changeBindAddr

app/redis-6.2.6/src/server.c:5654–5718  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

5652}
5653
5654int changeBindAddr(sds *addrlist, int addrlist_len) {
5655 int i;
5656 int result = C_OK;
5657
5658 char *prev_bindaddr[CONFIG_BINDADDR_MAX];
5659 int prev_bindaddr_count;
5660
5661 /* Close old TCP and TLS servers */
5662 closeSocketListeners(&server.ipfd);
5663 closeSocketListeners(&server.tlsfd);
5664
5665 /* Keep previous settings */
5666 prev_bindaddr_count = server.bindaddr_count;
5667 memcpy(prev_bindaddr, server.bindaddr, sizeof(server.bindaddr));
5668
5669 /* Copy new settings */
5670 memset(server.bindaddr, 0, sizeof(server.bindaddr));
5671 for (i = 0; i < addrlist_len; i++) {
5672 server.bindaddr[i] = zstrdup(addrlist[i]);
5673 }
5674 server.bindaddr_count = addrlist_len;
5675
5676 /* Bind to the new port */
5677 if ((server.port != 0 && listenToPort(server.port, &server.ipfd) != C_OK) ||
5678 (server.tls_port != 0 && listenToPort(server.tls_port, &server.tlsfd) != C_OK)) {
5679 serverLog(LL_WARNING, "Failed to bind, trying to restore old listening sockets.");
5680
5681 /* Restore old bind addresses */
5682 for (i = 0; i < addrlist_len; i++) {
5683 zfree(server.bindaddr[i]);
5684 }
5685 memcpy(server.bindaddr, prev_bindaddr, sizeof(server.bindaddr));
5686 server.bindaddr_count = prev_bindaddr_count;
5687
5688 /* Re-Listen TCP and TLS */
5689 server.ipfd.count = 0;
5690 if (server.port != 0 && listenToPort(server.port, &server.ipfd) != C_OK) {
5691 serverPanic("Failed to restore old listening sockets.");
5692 }
5693
5694 server.tlsfd.count = 0;
5695 if (server.tls_port != 0 && listenToPort(server.tls_port, &server.tlsfd) != C_OK) {
5696 serverPanic("Failed to restore old listening sockets.");
5697 }
5698
5699 result = C_ERR;
5700 } else {
5701 /* Free old bind addresses */
5702 for (i = 0; i < prev_bindaddr_count; i++) {
5703 zfree(prev_bindaddr[i]);
5704 }
5705 }
5706
5707 /* Create TCP and TLS event handlers */
5708 if (createSocketAcceptHandler(&server.ipfd, acceptTcpHandler) != C_OK) {
5709 serverPanic("Unrecoverable error creating TCP socket accept handler.");
5710 }
5711 if (createSocketAcceptHandler(&server.tlsfd, acceptTLSHandler) != C_OK) {

Callers 1

configSetCommandFunction · 0.85

Calls 8

closeSocketListenersFunction · 0.85
memsetFunction · 0.85
zstrdupFunction · 0.85
listenToPortFunction · 0.85
redisSetProcTitleFunction · 0.85
zfreeFunction · 0.70
memcpyFunction · 0.50

Tested by

no test coverage detected