From 22a6b511f7532c833044fb67524194dc0c6a9cdb Mon Sep 17 00:00:00 2001 From: angt Date: Mon, 30 Nov 2015 16:07:13 +0100 Subject: [PATCH] Little opt --- src/main.c | 57 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 30 insertions(+), 27 deletions(-) diff --git a/src/main.c b/src/main.c index 215be87..9d0d3c7 100644 --- a/src/main.c +++ b/src/main.c @@ -828,12 +828,6 @@ int main (int argc, char **argv) FD_SET(sock.fd, &rfds); - if (buffer_read_size(&tun.read) || blk_count) - FD_SET(sock.fd, &wfds); - - if (buffer_read_size(&sock.read)) - FD_SET(tun.fd, &wfds); - if (select(sock.fd+1, &rfds, &wfds, NULL, NULL)==-1) { if (errno==EINTR) continue; @@ -889,38 +883,47 @@ int main (int argc, char **argv) } } - buffer_shift(&tun.read); + while (1) { + buffer_shift(&tun.read); - while (blk_count) { - if (!blks[blk_read].size) { - blk_read++; - continue; + if (!stop_loop) { + for (; blk_count; blk_read++) { + if (!blks[blk_read].size) + break; + + if (buffer_write_size(&tun.read)0) { sock.write.read += r; - } else if (!r) { - stop_loop |= (1<<2); } else { - FD_SET(sock.fd, &wfds); + if (!r) { + stop_loop |= (1<<2); + } else { + FD_SET(sock.fd, &wfds); + } + break; } - } else { - if (stop_loop && !(stop_loop>>2)) { + } + + if (stop_loop && !buffer_read_size(&sock.write)) { + if (!(stop_loop&(1<<2))) { stop_loop |= (1<<2); shutdown(sock.fd, SHUT_WR); gt_log("%s: shutdown\n", sockname);