aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMagnus Hagander <magnus@hagander.net>2007-06-04 11:59:34 +0000
committerMagnus Hagander <magnus@hagander.net>2007-06-04 11:59:34 +0000
commitcec960f2e3aedfbcfe81878a0bdc2c4941649401 (patch)
treede08e9e366e73f7c202175def42ed1317a3b1ac6 /src
parent27918376f01b7c9ecd7b98034d23b1264b53f664 (diff)
downloadpostgresql-cec960f2e3aedfbcfe81878a0bdc2c4941649401.tar.gz
postgresql-cec960f2e3aedfbcfe81878a0bdc2c4941649401.zip
On win32, don't use SO_REUSEADDR for TCP sockets.
Per failure on buildfarm member baiji and subsequent discussion.
Diffstat (limited to 'src')
-rw-r--r--src/backend/libpq/pqcomm.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/backend/libpq/pqcomm.c b/src/backend/libpq/pqcomm.c
index d4475e8b56c..9297bb26302 100644
--- a/src/backend/libpq/pqcomm.c
+++ b/src/backend/libpq/pqcomm.c
@@ -30,7 +30,7 @@
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $PostgreSQL: pgsql/src/backend/libpq/pqcomm.c,v 1.182.2.1 2006/01/24 16:38:50 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/libpq/pqcomm.c,v 1.182.2.2 2007/06/04 11:59:34 mha Exp $
*
*-------------------------------------------------------------------------
*/
@@ -337,6 +337,16 @@ StreamServerPort(int family, char *hostName, unsigned short portNumber,
continue;
}
+#ifndef WIN32
+ /*
+ * Without the SO_REUSEADDR flag, a new postmaster can't be started right away after
+ * a stop or crash, giving "address already in use" error on TCP ports.
+ *
+ * On win32, however, this behavior only happens if the SO_EXLUSIVEADDRUSE is set.
+ * With SO_REUSEADDR, win32 allows multiple servers to listen on the same address,
+ * resulting in unpredictable behavior. With no flags at all, win32 behaves as
+ * Unix with SO_REUSEADDR.
+ */
if (!IS_AF_UNIX(addr->ai_family))
{
if ((setsockopt(fd, SOL_SOCKET, SO_REUSEADDR,
@@ -349,6 +359,7 @@ StreamServerPort(int family, char *hostName, unsigned short portNumber,
continue;
}
}
+#endif
#ifdef IPV6_V6ONLY
if (addr->ai_family == AF_INET6)