* Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: pqcomm.c,v 1.117 2001/03/22 03:59:30 momjian Exp $
+ * $Id: pqcomm.c,v 1.118 2001/07/11 19:03:07 tgl Exp $
*
*-------------------------------------------------------------------------
*/
#include "miscadmin.h"
-#ifndef SOMAXCONN
-#define SOMAXCONN 5 /* from Linux listen(2) man page */
-#endif
-
-
static void pq_close(void);
SockAddr saddr;
int fd,
err;
+ int maxconn;
size_t len = 0;
int one = 1;
}
#endif /* HAVE_UNIX_SOCKETS */
- listen(fd, SOMAXCONN);
+ /*
+ * Select appropriate accept-queue length limit. PG_SOMAXCONN is
+ * only intended to provide a clamp on the request on platforms where
+ * an overly large request provokes a kernel error (are there any?).
+ */
+ maxconn = MaxBackends * 2;
+ if (maxconn > PG_SOMAXCONN)
+ maxconn = PG_SOMAXCONN;
+
+ err = listen(fd, maxconn);
+ if (err < 0)
+ {
+ snprintf(PQerrormsg, PQERRORMSG_LENGTH,
+ "FATAL: StreamServerPort: listen() failed: %s\n",
+ strerror(errno));
+ fputs(PQerrormsg, stderr);
+ pqdebug("%s", PQerrormsg);
+ return STATUS_ERROR;
+ }
*fdP = fd;
* or in config.h afterwards. Of course, if you edit config.h, then your
* changes will be overwritten the next time you run configure.
*
- * $Id: config.h.in,v 1.166 2001/06/11 22:12:48 momjian Exp $
+ * $Id: config.h.in,v 1.167 2001/07/11 19:03:07 tgl Exp $
*/
#ifndef CONFIG_H
#define DEFAULT_MAX_EXPR_DEPTH 10000
/*
+ * PG_SOMAXCONN: maximum accept-queue length limit passed to listen(2).
+ * You'd think we should use SOMAXCONN from <sys/socket.h>, but on many
+ * systems that symbol is much smaller than the kernel's actual limit.
+ * In any case, this symbol need be twiddled only if you have a kernel
+ * that refuses large limit values, rather than silently reducing the
+ * value to what it can handle (which is what most if not all Unixen do).
+ */
+#define PG_SOMAXCONN 10000
+
+/*
* You can try changing this if you have a machine with bytes of another
* size, but no guarantee...
*/