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 0ca46cdb11cd059f49b040e23a1f6aa95734a70a..f43d1acd857ca17ce7aed557ad822cb07240482e 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)
                {