diff --git a/src/bind.c b/src/bind.c index a690b07..bcf6dee 100644 --- a/src/bind.c +++ b/src/bind.c @@ -314,11 +314,18 @@ gt_bind(int argc, char **argv) } } - if (FD_ISSET(mud_fd, &rfds)) { - const int r = mud_recv(mud, buf, sizeof(buf)); + if (FD_ISSET(mud_fd, &rfds)) { + int n = 1000; - if (r > 0 && ip_is_valid(buf, r)) - tun_write(tun_fd, buf, (size_t)r); + while (n--) { + const int r = mud_recv(mud, buf, sizeof(buf)); + + if (r <= 0) + break; + + if (ip_is_valid(buf, r)) + tun_write(tun_fd, buf, (size_t)r); + } } if (FD_ISSET(tun_fd, &rfds) && !mud_send_wait(mud)) {