From b5239736117b5f4af9d949bbd3cc7e98721dfcd7 Mon Sep 17 00:00:00 2001 From: Jouni Malinen Date: Fri, 30 May 2014 20:52:08 +0300 Subject: [PATCH] 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 --- src/radius/radius_client.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/radius/radius_client.c b/src/radius/radius_client.c index a7f11151d..10056a64a 100644 --- a/src/radius/radius_client.c +++ b/src/radius/radius_client.c @@ -390,6 +390,7 @@ static void radius_client_timer(void *eloop_ctx, void *timeout_ctx) int auth_failover = 0, acct_failover = 0; char abuf[50]; size_t prev_num_msgs; + int s; entry = radius->msgs; if (!entry) @@ -423,7 +424,10 @@ static void radius_client_timer(void *eloop_ctx, void *timeout_ctx) 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 || entry->msg_type == RADIUS_ACCT_INTERIM) acct_failover++;