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.)