Make libpq on windows not try to send chunks larger than 64Kb.
authorMagnus Hagander <magnus@hagander.net>
Wed, 20 Aug 2008 11:53:51 +0000 (11:53 +0000)
committerMagnus Hagander <magnus@hagander.net>
Wed, 20 Aug 2008 11:53:51 +0000 (11:53 +0000)
Per Microsoft knowledge base article Q201213, early versions of
Windows fail when we do this. Later versions of Windows appear
to have a higher limit than 64Kb, but do still fail on large
sends, so we unconditionally limit it for all versions.

Patch from Tom Lane.

src/interfaces/libpq/fe-misc.c

index dcb227a7ace75d214d543116c01ddb7089155e5a..a7f9379d97654d85c08e7b9b268a3edea2c58400 100644 (file)
@@ -752,7 +752,16 @@ pqSendSome(PGconn *conn, int len)
                int                     sent;
                char            sebuf[256];
 
+#ifndef WIN32
                sent = pqsecure_write(conn, ptr, len);
+#else
+               /*
+                * Windows can fail on large sends, per KB article Q201213. The failure-point
+                * appears to be different in different versions of Windows, but 64k should
+                * always be safe.
+                */
+               sent = pqsecure_write(conn, ptr, Min(len, 65536));
+#endif
 
                if (sent < 0)
                {