From db688e3ec1564e744e8791953a6f8a804d86013d Mon Sep 17 00:00:00 2001
From: Matt Johnston <matt@ucc.asn.au>
Date: Sat, 15 Mar 2014 11:37:02 +0800
Subject: [PATCH] Experiment of always writing data if available. Might waste a
 writev() with EAGAIN but always saves a select() - needs testing with
 bandwidth-limited and CPU-limited situations.

---
 common-session.c | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/common-session.c b/common-session.c
index 6bcb7fa9..e23be66d 100644
--- a/common-session.c
+++ b/common-session.c
@@ -186,13 +186,7 @@ void session_loop(void(*loophandler)()) {
 		/* check for auth timeout, rekeying required etc */
 		checktimeouts();
 
-		/* process session socket's incoming/outgoing data */
-		if (ses.sock_out != -1) {
-			if (FD_ISSET(ses.sock_out, &writefd) && !isempty(&ses.writequeue)) {
-				write_packet();
-			}
-		}
-
+		/* process session socket's incoming data */
 		if (ses.sock_in != -1) {
 			if (FD_ISSET(ses.sock_in, &readfd)) {
 				if (!ses.remoteident) {
@@ -218,6 +212,14 @@ void session_loop(void(*loophandler)()) {
 		 * during rekeying ) */
 		channelio(&readfd, &writefd);
 
+		/* process session socket's outgoing data */
+		if (ses.sock_out != -1) {
+			if (!isempty(&ses.writequeue)) {
+				write_packet();
+			}
+		}
+
+
 		if (loophandler) {
 			loophandler();
 		}
-- 
GitLab