diff options
Diffstat (limited to 'server')
-rw-r--r-- | server/realm.c | 23 | ||||
-rw-r--r-- | server/zserver.h | 1 |
2 files changed, 19 insertions, 5 deletions
diff --git a/server/realm.c b/server/realm.c index bda371b..431893e 100644 --- a/server/realm.c +++ b/server/realm.c @@ -83,9 +83,12 @@ realm_get_idx_by_addr(ZRealm *realm, int b; /* loop through the realms */ - for (srvr = realm->srvrs, b = 0; b < realm->count; b++, srvr++) + for (srvr = realm->srvrs, b = 0; b < realm->count; b++, srvr++) { + if (!srvr->usable) + continue; if (srvr->addr.sin_addr.s_addr == who->sin_addr.s_addr) return(b); + } return 0; } @@ -102,15 +105,21 @@ realm_next_idx_by_idx(realm, idx) srvr = realm->srvrs; a = idx; while (a > 0) { a--; srvr++; } - for (srvr, b = idx; b < realm->count; b++, srvr++) + for (srvr, b = idx; b < realm->count; b++, srvr++) { + if (!srvr->usable) + continue; if (!srvr->dontsend) return(b); + } /* recycle */ if (idx != 0) - for (srvr = realm->srvrs, b = 0; b < idx; b++, srvr++) + for (srvr = realm->srvrs, b = 0; b < idx; b++, srvr++) { + if (!srvr->usable) + continue; if (!srvr->dontsend) - return(b); + return(b); + } return 0; } @@ -315,9 +324,12 @@ realm_which_realm(struct sockaddr_in *who) /* loop through the realms */ for (realm = otherrealms, a = 0; a < nrealms; a++, realm++) /* loop through the addresses for the realm */ - for (srvr = realm->srvrs, b = 0; b < realm->count; b++, srvr++) + for (srvr = realm->srvrs, b = 0; b < realm->count; b++, srvr++) { + if (!srvr->usable) + continue; if (srvr->addr.sin_addr.s_addr == who->sin_addr.s_addr) return(realm); + } return 0; } @@ -550,6 +562,7 @@ realm_init(void) /* use the server port */ srvr->addr.sin_port = srv_addr.sin_port; srvr->addr.sin_family = AF_INET; + srvr->usable = 1; srvr->dontsend = nosend[jj]; } client = (Client *) malloc(sizeof(Client)); diff --git a/server/zserver.h b/server/zserver.h index 20c229d..b61cc06 100644 --- a/server/zserver.h +++ b/server/zserver.h @@ -113,6 +113,7 @@ struct _Destlist { struct _ZRealm_server { struct sockaddr_in addr; /* server's address */ + unsigned int usable :1; /* set once entry is usable */ unsigned int dontsend :1; /* private server, do not send */ }; |