ldp: return byte count from a successful recvfrom 84/17684/3
authorHaggai Eran <haggai.eran@gmail.com>
Tue, 19 Feb 2019 13:04:42 +0000 (15:04 +0200)
committerFlorin Coras <florin.coras@gmail.com>
Tue, 19 Feb 2019 17:14:24 +0000 (17:14 +0000)
Unless there's an error, recvfrom should return the number of bytes
received. The current code returns zero on success due to
ldp_copy_ep_to_sockaddr returning zero.

Change-Id: Ib843b99a08c44b5ee2d16efe9edab0cf5df65170
Signed-off-by: Haggai Eran <haggai.eran@gmail.com>
src/vcl/ldp.c

index f3ac310..e0fb935 100644 (file)
@@ -1478,7 +1478,7 @@ recvfrom (int fd, void *__restrict buf, size_t n, int flags,
          __SOCKADDR_ARG addr, socklen_t * __restrict addr_len)
 {
   vls_handle_t sid;
-  ssize_t size;
+  ssize_t size, rv;
 
   if ((errno = -ldp_init ()))
     return -1;
@@ -1495,7 +1495,11 @@ recvfrom (int fd, void *__restrict buf, size_t n, int flags,
          size = vls_recvfrom (sid, buf, n, flags, &ep);
 
          if (size > 0)
-           size = ldp_copy_ep_to_sockaddr (addr, addr_len, &ep);
+           {
+             rv = ldp_copy_ep_to_sockaddr (addr, addr_len, &ep);
+             if (rv < 0)
+               size = rv;
+           }
        }
       else
        size = vls_recvfrom (sid, buf, n, flags, NULL);