From 9338f06e900a459cbd5f33fe5e45234f5e541bbd Mon Sep 17 00:00:00 2001 From: Cedric Roux <cedric.roux@eurecom.fr> Date: Sun, 5 Jun 2016 13:10:52 +0200 Subject: [PATCH] socket_send does not crash anymore but returns an error The application (enb.c basically) will now monitor the socket and reconnect if it dies. See following commits. --- common/utils/T/tracer/enb.c | 7 ++++--- common/utils/T/tracer/textlog.c | 7 ++++--- common/utils/T/tracer/utils.c | 5 +++-- common/utils/T/tracer/utils.h | 3 ++- common/utils/T/tracer/vcd.c | 7 ++++--- 5 files changed, 17 insertions(+), 12 deletions(-) diff --git a/common/utils/T/tracer/enb.c b/common/utils/T/tracer/enb.c index eeaa0ff31f..1d97b428d3 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 f7bde62a43..362ff8103e 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 cb2e123fce..f285a71fb1 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 00193b9eeb..a5b1f1b9f6 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 46187f751b..d4972d15fc 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(); -- GitLab