From f9452513fcf92be881809006ce3c210805d5f2ad Mon Sep 17 00:00:00 2001 From: Ben Lindstrom Date: Thu, 15 Feb 2001 03:12:08 +0000 Subject: - 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 --- packet.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'packet.c') diff --git a/packet.c b/packet.c index 46e89bc0c..fb4314553 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(); } } -- cgit v1.2.3