RADIUS client: Trigger failover more quickly if socket is not valid

It is possible for the connect() call to fail (e.g., due to unreachable
network based on local routing table), so the current auth/acct_sock may
be left to -1. Use that as an addition trigger to allow server failover
operation to be performed more quickly if it is known that the
retransmission attempt will not succeed anyway.

Signed-off-by: Jouni Malinen <j@w1.fi>
This commit is contained in:
Jouni Malinen 2014-05-30 20:52:08 +03:00
parent 09844c0984
commit b523973611

View file

@ -390,6 +390,7 @@ static void radius_client_timer(void *eloop_ctx, void *timeout_ctx)
int auth_failover = 0, acct_failover = 0; int auth_failover = 0, acct_failover = 0;
char abuf[50]; char abuf[50];
size_t prev_num_msgs; size_t prev_num_msgs;
int s;
entry = radius->msgs; entry = radius->msgs;
if (!entry) if (!entry)
@ -423,7 +424,10 @@ static void radius_client_timer(void *eloop_ctx, void *timeout_ctx)
continue; continue;
} }
if (entry->attempts > RADIUS_CLIENT_NUM_FAILOVER) { s = entry->msg_type == RADIUS_AUTH ? radius->auth_sock :
radius->acct_sock;
if (entry->attempts > RADIUS_CLIENT_NUM_FAILOVER ||
(s < 0 && entry->attempts > 0)) {
if (entry->msg_type == RADIUS_ACCT || if (entry->msg_type == RADIUS_ACCT ||
entry->msg_type == RADIUS_ACCT_INTERIM) entry->msg_type == RADIUS_ACCT_INTERIM)
acct_failover++; acct_failover++;