- deraadt@cvs.openbsd.org 2001/02/12 22:56:09
     [clientloop.c packet.c ssh-keyscan.c]
     deal with EAGAIN/EINTR selects which were skipped
diff --git a/packet.c b/packet.c
index 46e89bc..fb43145 100644
--- a/packet.c
+++ b/packet.c
@@ -37,7 +37,7 @@
  */
 
 #include "includes.h"
-RCSID("$OpenBSD: packet.c,v 1.50 2001/02/11 12:59:25 markus Exp $");
+RCSID("$OpenBSD: packet.c,v 1.51 2001/02/12 22:56:09 deraadt Exp $");
 
 #include "xmalloc.h"
 #include "buffer.h"
@@ -688,7 +688,9 @@
 		FD_SET(connection_in, &set);
 
 		/* Wait for some data to arrive. */
-		select(connection_in + 1, &set, NULL, NULL, NULL);
+		while (select(connection_in + 1, &set, NULL, NULL, NULL) == -1 &&
+		    (errno == EAGAIN || errno == EINTR))
+			;
 
 		/* Read data from the socket. */
 		len = read(connection_in, buf, sizeof(buf));
@@ -1195,9 +1197,12 @@
 	packet_write_poll();
 	while (packet_have_data_to_write()) {
 		fd_set set;
+
 		FD_ZERO(&set);
 		FD_SET(connection_out, &set);
-		select(connection_out + 1, NULL, &set, NULL, NULL);
+		while (select(connection_out + 1, NULL, &set, NULL, NULL) == -1 &&
+		    (errno == EAGAIN || errno == EINTR))
+			;
 		packet_write_poll();
 	}
 }