- OpenBSD CVS Sync
   - djm@cvs.openbsd.org 2008/07/04 23:08:25
     [packet.c]
     handle EINTR in packet_write_poll()l ok dtucker@
diff --git a/packet.c b/packet.c
index ff22be6..1dda4a2 100644
--- a/packet.c
+++ b/packet.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: packet.c,v 1.155 2008/06/13 09:44:36 deraadt Exp $ */
+/* $OpenBSD: packet.c,v 1.156 2008/07/04 23:08:25 djm Exp $ */
 /*
  * Author: Tatu Ylonen <ylo@cs.hut.fi>
  * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -1475,16 +1475,19 @@
 
 	if (len > 0) {
 		len = write(connection_out, buffer_ptr(&output), len);
-		if (len <= 0) {
-			if (errno == EAGAIN || errno == EWOULDBLOCK)
+		if (len == -1) {
+			if (errno == EINTR || errno == EAGAIN ||
+			    errno == EWOULDBLOCK)
 				return;
-			else
-				fatal("Write failed: %.100s", strerror(errno));
+			fatal("Write failed: %.100s", strerror(errno));
 		}
+		if (len == 0)
+			fatal("Write connection closed");
 		buffer_consume(&output, len);
 	}
 }
 
+
 /*
  * Calls packet_write_poll repeatedly until all pending output data has been
  * written.