diff --git a/src/switch_utils.c b/src/switch_utils.c
index d75533339d..525d4efb02 100644
--- a/src/switch_utils.c
+++ b/src/switch_utils.c
@@ -831,6 +831,7 @@ static int get_netmask(struct sockaddr_in *me, int *mask)
 	INTERFACE_INFO interfaces[20];
 	unsigned long bytes;
 	int interface_count, x;
+	int r = -1;
 
 	*mask = 0;
 
@@ -839,7 +840,8 @@ static int get_netmask(struct sockaddr_in *me, int *mask)
 	}
 
 	if (WSAIoctl(sock, SIO_GET_INTERFACE_LIST, 0, 0, &interfaces, sizeof(interfaces), &bytes, 0, 0) == SOCKET_ERROR) {
-		return -1;
+		r = -1;
+		goto end;
 	}
 
     interface_count = bytes / sizeof(INTERFACE_INFO);
@@ -850,11 +852,14 @@ static int get_netmask(struct sockaddr_in *me, int *mask)
 		if (addr->sin_addr.s_addr == me->sin_addr.s_addr) {
 			struct sockaddr_in *netmask = (struct sockaddr_in *) & (interfaces[x].iiNetmask);
 			*mask = netmask->sin_addr.s_addr;
+			r = 0;
 			break;
 		}
     }
 
-	return 0;
+end:
+	closesocket(sock);
+	return r;
 }
 
 #else