FWIW I've dealt with that by checking for error codes.
If you try to send from an inactive link, it tells you RCL not enough or whatever that error is.
If you try to send to an inactive link, it tells you invalid target.
As the cost of isActive() is significant, I never actually call it. I just look at the error codes and mark them as internally inactive the first time I get an error trying to use one. Worst case you have 1 error returned when you try to do something, and in any case you never waste extra CPU polling isActive.