summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--server/realm.c23
-rw-r--r--server/zserver.h1
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 */
};