diff --git a/Common/GmshSocket.h b/Common/GmshSocket.h
index d6b251c96ca1f203a2baf00d7ff7a57b4a08e312..3f355c7ea7b4d36e748e8b7ab2f073bf8089deb5 100644
--- a/Common/GmshSocket.h
+++ b/Common/GmshSocket.h
@@ -303,8 +303,10 @@ class GmshServer : public GmshSocket{
       memset((char *) &addr_un, 0, sizeof(addr_un));
       strcpy(addr_un.sun_path, _sockname);
       addr_un.sun_family = AF_UNIX;
-      if(bind(tmpsock, (struct sockaddr *)&addr_un, sizeof(addr_un)) < 0)
+      if(bind(tmpsock, (struct sockaddr *)&addr_un, sizeof(addr_un)) < 0){
+        CloseSocket(tmpsock);
         return -2;  // Error: Couldn't bind socket to name
+      }
       // change permissions on the socket name in case it has to be rm'd later
       chmod(_sockname, 0666);
 #else
diff --git a/utils/solvers/c++/GmshSocket.h b/utils/solvers/c++/GmshSocket.h
index d6b251c96ca1f203a2baf00d7ff7a57b4a08e312..3f355c7ea7b4d36e748e8b7ab2f073bf8089deb5 100644
--- a/utils/solvers/c++/GmshSocket.h
+++ b/utils/solvers/c++/GmshSocket.h
@@ -303,8 +303,10 @@ class GmshServer : public GmshSocket{
       memset((char *) &addr_un, 0, sizeof(addr_un));
       strcpy(addr_un.sun_path, _sockname);
       addr_un.sun_family = AF_UNIX;
-      if(bind(tmpsock, (struct sockaddr *)&addr_un, sizeof(addr_un)) < 0)
+      if(bind(tmpsock, (struct sockaddr *)&addr_un, sizeof(addr_un)) < 0){
+        CloseSocket(tmpsock);
         return -2;  // Error: Couldn't bind socket to name
+      }
       // change permissions on the socket name in case it has to be rm'd later
       chmod(_sockname, 0666);
 #else