From 0c8e52da4eec5225eae46b8f815b4ba5856403c6 Mon Sep 17 00:00:00 2001 From: Steffen Vogel Date: Fri, 15 Jun 2018 14:56:48 +0200 Subject: [PATCH] socket: do not block in sendto() --- lib/nodes/socket.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/nodes/socket.c b/lib/nodes/socket.c index 6ac97ba05..c4c4b4f02 100644 --- a/lib/nodes/socket.c +++ b/lib/nodes/socket.c @@ -437,11 +437,13 @@ retry: ret = io_sprint(&s->io, buf, buflen, &wbytes, smps, cnt); case SOCKET_LAYER_UNIX: addrlen = SUN_LEN(&s->remote.sun); break; } - bytes = sendto(s->sd, buf, wbytes, 0, (struct sockaddr *) &s->remote, addrlen); + bytes = sendto(s->sd, buf, wbytes, MSG_DONTWAIT, (struct sockaddr *) &s->remote, addrlen); if (bytes < 0) { if ((errno == EPERM) || (errno == ENOENT && s->layer == SOCKET_LAYER_UNIX)) warn("Failed send to node %s: %s", node_name(n), strerror(errno)); + else if ((errno == EAGAIN) || (errno == EWOULDBLOCK)) + warn("socket: send would block"); else serror("Failed send to node %s", node_name(n)); }