In a distributed system a call can fail in the request, in the server or in the reply. A timeout looks the same in all three cases, so the caller does not know whether the operation was applied.