diff --git a/tracer/main.c b/tracer/main.c
index 31f5d54171718498ec257c37ed85a9b6be81c756..1a30bbef95a63fdde517d214d3511be25a204db3 100644
--- a/tracer/main.c
+++ b/tracer/main.c
@@ -44,7 +44,22 @@ static inline int GET(int s, void *out, int count)
 
 #else /* T_USE_SHARED_MEMORY */
 
-#define GET read
+#define GET fullread
+
+int fullread(int fd, void *_buf, int count)
+{
+  char *buf = _buf;
+  int ret = 0;
+  int l;
+  while (count) {
+    l = read(fd, buf, count);
+    if (l <= 0) { printf("read socket problem\n"); abort(); }
+    count -= l;
+    buf += l;
+    ret += l;
+  }
+  return ret;
+}
 
 #endif /* T_USE_SHARED_MEMORY */
 
@@ -236,7 +251,8 @@ void get_message(int s)
            buf[11],buf[12],buf[13],buf[14],buf[15]);
 #endif
     if (size != 4 * 7680)
-      {printf("bad T_ENB_INPUT_SIGNAL, only 7680 samples allowed\n");abort();}
+      {printf("bad T_ENB_INPUT_SIGNAL, only 7680 samples allowed "
+              "(received %d bytes = %d samples)\n", size, size/4);abort();}
     if (ul_plot) iq_plot_set(ul_plot, (short*)buf, 7680, subframe*7680, 0);
     break;
   }