diff --git a/src/backend/libpq/be-secure.c b/src/backend/libpq/be-secure.c
index c9a8f6d..0f5313e 100644
--- a/src/backend/libpq/be-secure.c
+++ b/src/backend/libpq/be-secure.c
@@ -171,7 +171,10 @@ rloop:
 							  WL_SOCKET_READABLE,
 							  port->sock, 0);
 
-		if (w & WL_SOCKET_READABLE)
+		if (w & WL_SOCKET_CLOSED)
+		{
+		}
+		else if (w & WL_SOCKET_READABLE)
 		{
 			goto rloop;
 		}
@@ -241,7 +244,10 @@ wloop:
 							  WL_SOCKET_WRITEABLE,
 							  port->sock, 0);
 
-		if (w & WL_SOCKET_WRITEABLE)
+		if (w & WL_SOCKET_CLOSED)
+		{
+		}
+		else if (w & WL_SOCKET_WRITEABLE)
 		{
 			goto wloop;
 		}
diff --git a/src/backend/port/win32_latch.c b/src/backend/port/win32_latch.c
index 13fb610..9875f03 100644
--- a/src/backend/port/win32_latch.c
+++ b/src/backend/port/win32_latch.c
@@ -243,6 +243,7 @@ WaitLatchOrSocket(volatile Latch *latch, int wakeEvents, pgsocket sock,
 			}
 			if (resEvents.lNetworkEvents & FD_CLOSE)
 			{
+				result |= WL_SOCKET_CLOSED;
 				if (wakeEvents & WL_SOCKET_READABLE)
 					result |= WL_SOCKET_READABLE;
 				if (wakeEvents & WL_SOCKET_WRITEABLE)
diff --git a/src/include/storage/latch.h b/src/include/storage/latch.h
index 28fc684..f9ff946 100644
--- a/src/include/storage/latch.h
+++ b/src/include/storage/latch.h
@@ -101,6 +101,7 @@ typedef struct Latch
 #define WL_SOCKET_WRITEABLE  (1 << 2)
 #define WL_TIMEOUT			 (1 << 3)
 #define WL_POSTMASTER_DEATH  (1 << 4)
+#define WL_SOCKET_CLOSED	 (1 << 5)
 
 /*
  * prototypes for functions in latch.c
