diff --git a/common/utils/T/tracer/enb.c b/common/utils/T/tracer/enb.c
index eeaa0ff31fc00a553c9a870b75fc677307d7cf63..1d97b428d3e57aad8459b5eb8b6f648a16a3eb80 100644
--- a/common/utils/T/tracer/enb.c
+++ b/common/utils/T/tracer/enb.c
@@ -39,9 +39,10 @@ void is_on_changed(void *_d)
   if (d->socket == -1) goto no_connection;
 
   t = 1;
-  socket_send(d->socket, &t, 1);
-  socket_send(d->socket, &d->nevents, sizeof(int));
-  socket_send(d->socket, d->is_on, d->nevents * sizeof(int));
+  if (socket_send(d->socket, &t, 1) == -1 ||
+      socket_send(d->socket, &d->nevents, sizeof(int)) == -1 ||
+      socket_send(d->socket, d->is_on, d->nevents * sizeof(int)) == -1)
+    abort();
 
 no_connection:
   if (pthread_mutex_unlock(&d->lock)) abort();
diff --git a/common/utils/T/tracer/textlog.c b/common/utils/T/tracer/textlog.c
index f7bde62a43898ab5add5cbade75034ebf76e6797..362ff8103eaf95a4e20403c2bafcf72f2cfaf301 100644
--- a/common/utils/T/tracer/textlog.c
+++ b/common/utils/T/tracer/textlog.c
@@ -33,9 +33,10 @@ void is_on_changed(void *_d)
   if (d->socket == -1) goto no_connection;
 
   t = 1;
-  socket_send(d->socket, &t, 1);
-  socket_send(d->socket, &d->nevents, sizeof(int));
-  socket_send(d->socket, d->is_on, d->nevents * sizeof(int));
+  if (socket_send(d->socket, &t, 1) == -1 ||
+      socket_send(d->socket, &d->nevents, sizeof(int)) == -1 ||
+      socket_send(d->socket, d->is_on, d->nevents * sizeof(int)) == -1)
+    abort();
 
 no_connection:
   if (pthread_mutex_unlock(&d->lock)) abort();
diff --git a/common/utils/T/tracer/utils.c b/common/utils/T/tracer/utils.c
index cb2e123fce1a2100a7beb8bdc2a713acaa629f3e..f285a71fb115ec99a74815543adab49d9cd9c28e 100644
--- a/common/utils/T/tracer/utils.c
+++ b/common/utils/T/tracer/utils.c
@@ -68,16 +68,17 @@ list *list_append(list *l, void *data)
 /* socket                                                                   */
 /****************************************************************************/
 
-void socket_send(int socket, void *buffer, int size)
+int socket_send(int socket, void *buffer, int size)
 {
   char *x = buffer;
   int ret;
   while (size) {
     ret = write(socket, x, size);
-    if (ret <= 0) abort();
+    if (ret <= 0) return -1;
     size -= ret;
     x += ret;
   }
+  return 0;
 }
 
 int get_connection(char *addr, int port)
diff --git a/common/utils/T/tracer/utils.h b/common/utils/T/tracer/utils.h
index 00193b9eeb03fe74b68e7da1ced8bad0da554025..a5b1f1b9f663754bc478fe18b74d8205f0fe6f72 100644
--- a/common/utils/T/tracer/utils.h
+++ b/common/utils/T/tracer/utils.h
@@ -20,7 +20,8 @@ list *list_append(list *l, void *data);
 /* socket                                                                   */
 /****************************************************************************/
 
-void socket_send(int socket, void *buffer, int size);
+/* socket_send: return 0 if okay, -1 on error */
+int socket_send(int socket, void *buffer, int size);
 int get_connection(char *addr, int port);
 int fullread(int fd, void *_buf, int count);
 int connect_to(char *addr, int port);
diff --git a/common/utils/T/tracer/vcd.c b/common/utils/T/tracer/vcd.c
index 46187f751bb0adb66e9720e032ba94189aa29cb1..d4972d15fc3c21afa3acdc0df4d533302231a0df 100644
--- a/common/utils/T/tracer/vcd.c
+++ b/common/utils/T/tracer/vcd.c
@@ -30,9 +30,10 @@ void is_on_changed(void *_d)
   if (d->socket == -1) goto no_connection;
 
   t = 1;
-  socket_send(d->socket, &t, 1);
-  socket_send(d->socket, &d->nevents, sizeof(int));
-  socket_send(d->socket, d->is_on, d->nevents * sizeof(int));
+  if (socket_send(d->socket, &t, 1) == -1 ||
+      socket_send(d->socket, &d->nevents, sizeof(int)) == -1 ||
+      socket_send(d->socket, d->is_on, d->nevents * sizeof(int)) == -1)
+    abort();
 
 no_connection:
   if (pthread_mutex_unlock(&d->lock)) abort();