diff --git a/src/rpc/virnetclient.c b/src/rpc/virnetclient.c
index c102cdc223..fcc2e806e1 100644
--- a/src/rpc/virnetclient.c
+++ b/src/rpc/virnetclient.c
@@ -1230,9 +1230,6 @@ static int virNetClientCallDispatchStream(virNetClientPtr client)
 
         if (thecall && thecall->expectReply) {
             VIR_DEBUG("Got a synchronous error");
-            /* Raise error now, so that this call will see it immediately */
-            if (!virNetClientStreamRaiseError(st))
-                VIR_DEBUG("unable to raise synchronous error");
             thecall->mode = VIR_NET_CLIENT_MODE_COMPLETE;
         }
         return 0;
@@ -1947,16 +1944,11 @@ static int virNetClientIO(virNetClientPtr client,
      */
     virNetClientIOUpdateCallback(client, false);
 
-    virResetLastError();
     rv = virNetClientIOEventLoop(client, thiscall);
 
     if (client->sock)
         virNetClientIOUpdateCallback(client, true);
 
-    if (rv == 0 &&
-        virGetLastErrorCode())
-        rv = -1;
-
  cleanup:
     VIR_DEBUG("All done with our call head=%p call=%p rv=%d",
               client->waitDispatch, thiscall, rv);
@@ -2213,6 +2205,9 @@ int virNetClientSendStream(virNetClientPtr client,
     if (virNetClientSendInternal(client, msg, expectReply, false) < 0)
         goto cleanup;
 
+    if (virNetClientStreamRaiseError(st))
+        goto cleanup;
+
     ret = 0;
 
  cleanup: