diff -Naur gpsd-3.16_orig/gpsd.c gpsd-3.16_patched/gpsd.c --- gpsd-3.16_orig/gpsd.c 2016-01-04 15:22:45.000000000 -0500 +++ gpsd-3.16_patched/gpsd.c 2017-06-28 09:28:19.786643313 -0400 @@ -2328,7 +2328,7 @@ lock_subscriber(sub); if (FD_ISSET(sub->fd, &rfds)) { char buf[BUFSIZ]; - int buflen; + int buflen, tmpbuflen; unlock_subscriber(sub); @@ -2339,6 +2339,10 @@ (int)recv(sub->fd, buf, sizeof(buf) - 1, 0)) <= 0) { detach_client(sub); } else { + while (buflen == 1){ + tmpbuflen = (int)recv(sub->fd, buf+1, sizeof(buf) - 2, 0); + if (tmpbuflen > 0) buflen += tmpbuflen; + } if (buf[buflen - 1] != '\n') buf[buflen++] = '\n'; buf[buflen] = '\0';