diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c
index e752d5e88715a1bb212e5dd22f54cea6ba04e9d7..51ec3b888566e47d35b3753403d034d013960dbb 100644
--- a/src/backend/postmaster/postmaster.c
+++ b/src/backend/postmaster/postmaster.c
@@ -11,7 +11,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.174 2000/10/24 21:33:52 tgl Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.175 2000/10/25 22:27:25 tgl Exp $
  *
  * NOTES
  *
@@ -262,7 +262,7 @@ static void InitSSL(void);
 #endif
 
 #ifdef CYR_RECODE
-void		GetCharSetByHost(char *, int, char *);
+extern void GetCharSetByHost(char *, int, char *);
 
 #endif
 
@@ -803,34 +803,38 @@ ServerLoop(void)
 		Port	   *port;
 		fd_set		rmask,
 					wmask;
+		struct timeval *timeout = (struct timeval *) NULL;
 #ifdef USE_SSL
-		bool		no_select = false;
-#endif
+		struct timeval timeout_tv;
 
 		/*
-		 * Wait for something to happen.
+		 * If we are using SSL, there may be input data already read and
+		 * pending in SSL's input buffers.  If so, check for additional
+		 * input from other clients, but don't delay before processing.
 		 */
-		memcpy((char *) &rmask, (char *) &readmask, sizeof(fd_set));
-		memcpy((char *) &wmask, (char *) &writemask, sizeof(fd_set));
-
-#ifdef USE_SSL
 		for (curr = DLGetHead(PortList); curr; curr = DLGetSucc(curr))
 		{
-			if (((Port *) DLE_VAL(curr))->ssl &&
-				SSL_pending(((Port *) DLE_VAL(curr))->ssl) > 0)
+			Port	   *port = (Port *) DLE_VAL(curr);
+
+			if (port->ssl && SSL_pending(port->ssl))
 			{
-				no_select = true;
+				timeout_tv.tv_sec = 0;
+				timeout_tv.tv_usec = 0;
+				timeout = &timeout_tv;
 				break;
 			}
 		}
-		if (no_select)
-			FD_ZERO(&rmask);	/* So we don't accept() anything below */
 #endif
 
+		/*
+		 * Wait for something to happen.
+		 */
+		memcpy((char *) &rmask, (char *) &readmask, sizeof(fd_set));
+		memcpy((char *) &wmask, (char *) &writemask, sizeof(fd_set));
+
 		PG_SETMASK(&UnBlockSig);
 
-		if (select(nSockets, &rmask, &wmask, (fd_set *) NULL,
-				   (struct timeval *) NULL) < 0)
+		if (select(nSockets, &rmask, &wmask, (fd_set *) NULL, timeout) < 0)
 		{
 			if (errno == EINTR || errno == EWOULDBLOCK)
 				continue;
@@ -894,8 +898,10 @@ ServerLoop(void)
 							   (void *) port);
 		}
 
-		/* Build up new masks for select(). */
-
+		/*
+		 * Scan active ports, processing any available input.  While we
+		 * are at it, build up new masks for next select().
+		 */
 		nSockets = initMasks(&readmask, &writemask);
 
 		curr = DLGetHead(PortList);
@@ -946,7 +952,7 @@ ServerLoop(void)
 				/*
 				 * Can't start backend if max backend count is exceeded.
 				 *
-				 * The same when shutdowning data base.
+				 * The same when data base is in startup/shutdown mode.
 				 */
 				if (Shutdown > NoShutdown)
 					PacketSendError(&port->pktInfo,
@@ -966,8 +972,8 @@ ServerLoop(void)
 					/*
 					 * If the backend start fails then keep the connection
 					 * open to report it.  Otherwise, pretend there is an
-					 * error to close the connection which will now be
-					 * managed by the backend.
+					 * error to close our descriptor for the connection,
+					 * which will now be managed by the backend.
 					 */
 					if (BackendStartup(port) != STATUS_OK)
 						PacketSendError(&port->pktInfo,
@@ -1067,22 +1073,23 @@ readStartupPacket(void *arg, PacketLen len, void *pkt)
 		char		SSLok;
 
 #ifdef USE_SSL
-                if (!EnableSSL || port->laddr.sa.sa_family != AF_INET)
-		        /* No SSL when disabled or on Unix sockets */
-   		        SSLok = 'N';
+		/* No SSL when disabled or on Unix sockets */
+		if (!EnableSSL || port->laddr.sa.sa_family != AF_INET)
+			SSLok = 'N';
 		else
-		        SSLok = 'S';		/* Support for SSL */
+			SSLok = 'S';		/* Support for SSL */
 #else
 		SSLok = 'N';			/* No support for SSL */
 #endif
 		if (send(port->sock, &SSLok, 1, 0) != 1)
 		{
 			perror("Failed to send SSL negotiation response");
-			return STATUS_ERROR;/* Close connection */
+			return STATUS_ERROR; /* Close connection */
 		}
 
 #ifdef USE_SSL
-		if (SSLok == 'S') {
+		if (SSLok == 'S')
+		{
 		  if (!(port->ssl = SSL_new(SSL_context)) ||
 		      !SSL_set_fd(port->ssl, port->sock) ||
 		      SSL_accept(port->ssl) <= 0)