From 2936a69a1b3ad4f6dffbff652eb1b6ca7756754d Mon Sep 17 00:00:00 2001 From: Francois Berder Date: Mon, 6 Mar 2017 13:22:57 +0000 Subject: [PATCH 1/4] posix: sockets: Fix return value of listen function If an error happens, listen was returning 1 instead of -1. Signed-off-by: Francois Berder --- sys/posix/sockets/posix_sockets.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/posix/sockets/posix_sockets.c b/sys/posix/sockets/posix_sockets.c index e38d20286f..da8d2d07a1 100644 --- a/sys/posix/sockets/posix_sockets.c +++ b/sys/posix/sockets/posix_sockets.c @@ -752,7 +752,7 @@ int listen(int socket, int backlog) bf_unset(_sock_pool_used, _get_sock_idx(sock)); mutex_unlock(&_socket_pool_mutex); } - return -res; + return res; #else (void)socket; (void)backlog; From 8f839fbc317aebd9cc893a62d981858d354e7ded Mon Sep 17 00:00:00 2001 From: Francois Berder Date: Tue, 7 Mar 2017 11:02:11 +0000 Subject: [PATCH 2/4] posix: sockets: address was not set in recvfrom The address is an optional parameter of recvfrom. If it is not null, recvfrom must store the address of the sender. However this was only allowed if res was equal to 0, which is wrong since res contains the number of bytes received or -1. This commit ensures that the address is set only if no previous errors happened before. Signed-off-by: Francois Berder --- sys/posix/sockets/posix_sockets.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/posix/sockets/posix_sockets.c b/sys/posix/sockets/posix_sockets.c index da8d2d07a1..a291d2bf39 100644 --- a/sys/posix/sockets/posix_sockets.c +++ b/sys/posix/sockets/posix_sockets.c @@ -826,7 +826,7 @@ ssize_t recvfrom(int socket, void *restrict buffer, size_t length, int flags, res = -1; break; } - if ((res == 0) && (address != NULL) && (address_len != 0)) { + if ((res >= 0) && (address != NULL) && (address_len != 0)) { switch (s->type) { #ifdef MODULE_SOCK_TCP case SOCK_STREAM: From 8d2ec19be6421e5b6164a5e034891c367c66c1b0 Mon Sep 17 00:00:00 2001 From: Francois Berder Date: Tue, 7 Mar 2017 11:07:16 +0000 Subject: [PATCH 3/4] posix: sockets: Fix timeout regression of recvfrom Commit de41971aab3b9da84ee3d5db8406ecdf4b0e21b4 sets the default timeout to 0. This change should not have been part of the commit. Signed-off-by: Francois Berder --- sys/posix/sockets/posix_sockets.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/posix/sockets/posix_sockets.c b/sys/posix/sockets/posix_sockets.c index a291d2bf39..73b31413c4 100644 --- a/sys/posix/sockets/posix_sockets.c +++ b/sys/posix/sockets/posix_sockets.c @@ -814,7 +814,7 @@ ssize_t recvfrom(int socket, void *restrict buffer, size_t length, int flags, #ifdef MODULE_SOCK_UDP case SOCK_DGRAM: /* TODO: apply configured timeout */ - if ((res = sock_udp_recv(&s->sock->udp, buffer, length, 0, + if ((res = sock_udp_recv(&s->sock->udp, buffer, length, SOCK_NO_TIMEOUT, &ep)) < 0) { errno = -res; res = -1; From 27dec749e8c7909922148a26dd27ca7a2adcb074 Mon Sep 17 00:00:00 2001 From: Francois Berder Date: Tue, 7 Mar 2017 14:26:48 +0000 Subject: [PATCH 4/4] posix: sockets: Fix return value of recvfrom and sendto _bind_connect already sets errno and returns -1 or 0. Signed-off-by: Francois Berder --- sys/posix/sockets/posix_sockets.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/sys/posix/sockets/posix_sockets.c b/sys/posix/sockets/posix_sockets.c index 73b31413c4..2be1438d33 100644 --- a/sys/posix/sockets/posix_sockets.c +++ b/sys/posix/sockets/posix_sockets.c @@ -786,8 +786,7 @@ ssize_t recvfrom(int socket, void *restrict buffer, size_t length, int flags, #endif /* bind implicitly */ if ((res = _bind_connect(s, NULL, 0)) < 0) { - errno = -res; - return -1; + return res; } } switch (s->type) { @@ -873,8 +872,7 @@ ssize_t sendto(int socket, const void *buffer, size_t length, int flags, #endif /* bind implicitly */ if ((res = _bind_connect(s, NULL, 0)) < 0) { - errno = -res; - return -1; + return res; } } #if defined(MODULE_SOCK_IP) || defined(MODULE_SOCK_UDP)