Assume that you have an existing local interface that provides matrix math operations. Since it is local, errors such as floating-point overflow or divide by zero are returned to the caller of a matrix operation as exceptions. It is likely that these exceptions are caused by providing data to the operation in an improper form.
In this case, the exceptions are part of the interface, so fault_status changes the way the application calls the matrix interface and probably is undesirable. Depending on the environment, finding a server may not be difficult (if the network is relatively stable and has enough resources), and adding comm_status serves only to introduce differences between the local and distributed applications.
If a decision as to what action to take is based upon a communications failure, then you may try to add the conditional code comm_status requires. Otherwise, using auto_handle allows an attempt on each available server. If no server is available, the application terminates because it cannot proceed. You can add an exception handler to the main program to report the error in a user-friendly manner.