bug-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 1/2] lwip: Set output flags when calling recv()


From: Samuel Thibault
Subject: Re: [PATCH 1/2] lwip: Set output flags when calling recv()
Date: Sat, 4 May 2019 11:00:04 +0200
User-agent: NeoMutt/20170113 (1.7.2)

Joan Lledó, le sam. 04 mai 2019 10:25:05 +0200, a ecrit:
>     Lwip 2.1.2 added a new function lwip_recvmsg() which writes out flags
>     for the recv() operation.

Applied, thanks!

>     * lwip/socket-ops.c: Call lwip_recvmsg() instead of lwip_recvfrom().
> ---
>  lwip/socket-ops.c | 21 +++++++++++++--------
>  1 file changed, 13 insertions(+), 8 deletions(-)
> 
> diff --git a/lwip/socket-ops.c b/lwip/socket-ops.c
> index 62b36e08..ed506ce9 100644
> --- a/lwip/socket-ops.c
> +++ b/lwip/socket-ops.c
> @@ -392,10 +392,13 @@ lwip_S_socket_recv (struct sock_user * user,
>                   int *outflags, mach_msg_type_number_t amount)
>  {
>    error_t err;
> -  struct sockaddr_storage addr;
> -  socklen_t addrlen = sizeof (addr);
> +  union { struct sockaddr_storage storage; struct sockaddr sa; } addr;
>    int alloced = 0;
>    int sockflags;
> +  struct iovec iov;
> +  struct msghdr m = { msg_name: &addr.sa, msg_namelen:sizeof addr,
> +    msg_controllen: 0, msg_iov: &iov, msg_iovlen:1
> +    };
>  
>    if (!user)
>      return EOPNOTSUPP;
> @@ -413,13 +416,14 @@ lwip_S_socket_recv (struct sock_user * user,
>        alloced = 1;
>      }
>  
> +  iov.iov_base = *data;
> +  iov.iov_len = amount;
> +
>    sockflags = lwip_fcntl (user->sock->sockno, F_GETFL, 0);
>    if (sockflags & O_NONBLOCK)
>      flags |= MSG_DONTWAIT;
>  
> -  /* TODO: use recvmsg instead */
> -  err = lwip_recvfrom (user->sock->sockno, *data, amount,
> -                    flags, (struct sockaddr *) &addr, &addrlen);
> +  err = lwip_recvmsg (user->sock->sockno, &m, flags);
>  
>    if (err < 0)
>      {
> @@ -435,13 +439,14 @@ lwip_S_socket_recv (struct sock_user * user,
>  
>        /* Set the peer's address for the caller */
>        err =
> -     lwip_S_socket_create_address (0, addr.ss_family, (void *) &addr,
> -                                   addrlen, addrport, addrporttype);
> +     lwip_S_socket_create_address (0, addr.sa.sa_family,
> +                                   (void *) &addr.sa, m.msg_namelen,
> +                                   addrport, addrporttype);
>  
>        if (err && alloced)
>       munmap (*data, *datalen);
>  
> -      *outflags = 0;         /* FIXME */
> +      *outflags = m.msg_flags;
>        *nports = 0;
>        *portstype = MACH_MSG_TYPE_COPY_SEND;
>        *controllen = 0;
> -- 
> 2.17.1
> 
> 

-- 
Samuel
>Ever heard of .cshrc?
That's a city in Bosnia.  Right?
(Discussion in comp.os.linux.misc on the intuitiveness of commands.)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]