diff --git a/lib/bb/siggen.py b/lib/bb/siggen.py
index 89b70fb6a..145d7cebc 100644
--- a/lib/bb/siggen.py
+++ b/lib/bb/siggen.py
@@ -704,39 +704,42 @@ class SignatureGeneratorUniHashMixIn(object):
                 query_tids.append(tid)
 
         if query_tids:
-            with self.client() as client:
-                unihashes = client.get_unihash_batch((self._get_method(tid), self.taskhash[tid]) for tid in query_tids)
-
-        for idx, tid in enumerate(query_tids):
-            # In the absence of being able to discover a unique hash from the
-            # server, make it be equivalent to the taskhash. The unique "hash" only
-            # really needs to be a unique string (not even necessarily a hash), but
-            # making it match the taskhash has a few advantages:
-            #
-            # 1) All of the sstate code that assumes hashes can be the same
-            # 2) It provides maximal compatibility with builders that don't use
-            #    an equivalency server
-            # 3) The value is easy for multiple independent builders to derive the
-            #    same unique hash from the same input. This means that if the
-            #    independent builders find the same taskhash, but it isn't reported
-            #    to the server, there is a better chance that they will agree on
-            #    the unique hash.
-            taskhash = self.taskhash[tid]
-            unihash = unihashes[idx]
-
-            if unihash:
-                # A unique hash equal to the taskhash is not very interesting,
-                # so it is reported it at debug level 2. If they differ, that
-                # is much more interesting, so it is reported at debug level 1
-                hashequiv_logger.bbdebug((1, 2)[unihash == taskhash], 'Found unihash %s in place of %s for %s from %s' % (unihash, taskhash, tid, self.server))
-            else:
-                hashequiv_logger.debug2('No reported unihash for %s:%s from %s' % (tid, taskhash, self.server))
-                unihash = taskhash
+            unihashes = []
+            try:
+                with self.client() as client:
+                    unihashes = client.get_unihash_batch((self._get_method(tid), self.taskhash[tid]) for tid in query_tids)
+            except (ConnectionError, FileNotFoundError) as e:
+                bb.warn('Error contacting Hash Equivalence Server %s: %s' % (self.server, str(e)))
 
+            for idx, tid in enumerate(query_tids):
+                # In the absence of being able to discover a unique hash from the
+                # server, make it be equivalent to the taskhash. The unique "hash" only
+                # really needs to be a unique string (not even necessarily a hash), but
+                # making it match the taskhash has a few advantages:
+                #
+                # 1) All of the sstate code that assumes hashes can be the same
+                # 2) It provides maximal compatibility with builders that don't use
+                #    an equivalency server
+                # 3) The value is easy for multiple independent builders to derive the
+                #    same unique hash from the same input. This means that if the
+                #    independent builders find the same taskhash, but it isn't reported
+                #    to the server, there is a better chance that they will agree on
+                #    the unique hash.
+                taskhash = self.taskhash[tid]
+
+                if unihashes and unihashes[idx]:
+                    unihash = unihashes[idx]
+                    # A unique hash equal to the taskhash is not very interesting,
+                    # so it is reported it at debug level 2. If they differ, that
+                    # is much more interesting, so it is reported at debug level 1
+                    hashequiv_logger.bbdebug((1, 2)[unihash == taskhash], 'Found unihash %s in place of %s for %s from %s' % (unihash, taskhash, tid, self.server))
+                else:
+                    hashequiv_logger.debug2('No reported unihash for %s:%s from %s' % (tid, taskhash, self.server))
+                    unihash = taskhash
 
-            self.set_unihash(tid, unihash)
-            self.unihash[tid] = unihash
-            result[tid] = unihash
+                self.set_unihash(tid, unihash)
+                self.unihash[tid] = unihash
+                result[tid] = unihash
 
         return result
 
@@ -814,7 +817,7 @@ class SignatureGeneratorUniHashMixIn(object):
                     d.setVar('BB_UNIHASH', new_unihash)
                 else:
                     hashequiv_logger.debug('Reported task %s as unihash %s to %s' % (taskhash, unihash, self.server))
-            except ConnectionError as e:
+            except (ConnectionError, FileNotFoundError) as e:
                 bb.warn('Error contacting Hash Equivalence Server %s: %s' % (self.server, str(e)))
         finally:
             if sigfile:
@@ -856,7 +859,7 @@ class SignatureGeneratorUniHashMixIn(object):
                 # TODO: What to do here?
                 hashequiv_logger.verbose('Task %s unihash reported as unwanted hash %s' % (tid, finalunihash))
 
-        except ConnectionError as e:
+        except (ConnectionError, FileNotFoundError) as e:
             bb.warn('Error contacting Hash Equivalence Server %s: %s' % (self.server, str(e)))
 
         return False
