summaryrefslogtreecommitdiffstats
path: root/packet.c
diff options
context:
space:
mode:
authorBen Lindstrom <mouring@eviladmin.org>2001-02-15 03:12:08 +0000
committerBen Lindstrom <mouring@eviladmin.org>2001-02-15 03:12:08 +0000
commitf9452513fcf92be881809006ce3c210805d5f2ad (patch)
tree7422ff5a747a6183001292786a74b36adc9453b4 /packet.c
parentd8a9021f3652d8ab99d0fed2460420c3eb4e10a2 (diff)
- 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
Diffstat (limited to 'packet.c')
-rw-r--r--packet.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/packet.c b/packet.c
index 46e89bc0..fb431455 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 @@ packet_read(int *payload_len_ptr)
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_wait()
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();
}
}