rc_acct_async(3)
π rc_acct_async(3) π
okay bestie, welcome to the rc_acct_async page from the radcli Radius client library. yes, that radcli. pull up a chair, this one's actually kinda iconic.
β¨ NAME β¨
rc_acct_async β drops an accounting request on every single configured accounting server and then just... doesn't wait for a reply. fire and forget, no cap. π₯
πΈ SYNOPSIS πΈ
#include <radcli/>
int rc_acct_async(
rc_handle *rh,
uint32_t nas_port,
VALUE_PAIR *send
);
π¦ DESCRIPTION π¦
so. this function picks which server list to use the exact same way rc_acct() does β that's acctserver, or authserver if you're under TLS/DTLS. same energy, same rules. π«Ά
but here's where it gets different, and honestly it's the whole point: rc_acct() and rc_aaa() are out here being all picky β they stop at the first server that replies, and only fail over to the next one after a timeout. very "let me wait and see" of them. rc_acct_async does not do that. it sends to every configured server unconditionally, because there is literally no reply to judge success or failure by. no vibe check possible. π
it's for best-effort notifications, bestie β like an Accounting-Stop you send while your app is shutting down and you absolutely cannot afford to block. you're leaving the party, you're not waiting for the host to say goodbye. π
π― PARAMETERS π―
rhβ a handle to your parsed configuration. the whole vibe, basically.nas_portβ the physical NAS port number to include. and yeah, it may be zero, no judgment. πsendβ theVALUE_PAIRlist of attributes you're sending. heads up:NAS-PortandAcct-Delay-Timeget filled in for you, same as withrc_acct(). you don't gotta do it yourself, king. π
π RETURN VALUE π
OK_RC(0) β the packet got handed off to the socket layer for at least one server. slay. β¨ERROR_RCβ either no accounting servers are configured at all π, or the send failed for every single one of them. rough.
π SEE ALSO π
the whole friend group, fr fr β go say hi:
rc_aaa(3), rc_aaa_ctx(3), rc_aaa_ctx_free(3), rc_aaa_ctx_get_secret(3), rc_aaa_ctx_get_vector(3), rc_aaa_ctx_server(3), rc_acct(3), rc_acct_proxy(3), rc_auth(3), rc_auth_proxy(3), rc_avpair_add(3), rc_avpair_assign(3), rc_avpair_copy(3), rc_avpair_free(3), rc_avpair_gen(3), rc_avpair_get(3), rc_avpair_get_attr(3), rc_avpair_get_in6(3), rc_avpair_get_raw(3), rc_avpair_get_uint32(3), rc_avpair_insert(3), rc_avpair_log(3), rc_avpair_new(3), rc_avpair_next(3), rc_avpair_parse(3), rc_avpair_remove(3), rc_avpair_tostr(3), rc_buildreq(3), rc_check(3), rc_dict_addattr(3), rc_dict_addval(3), rc_dict_addvend(3), rc_dict_findattr(3), rc_dict_findval(3), rc_dict_findvend(3), rc_dict_getattr(3), rc_dict_getval(3), rc_dict_getvend(3), rc_send_server(3)
okay that's the page!! π this beauty is from the radcli crew and it's dated 2026-10-10 β go send some accounting packets into the void, bestie, they're not gonna reply anyway πβπ
π¦ where this page comes from
- arch rolling: radcli 2.0.1-1 Β· BSD
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms