blob: 44dc21fabc3e1a2beca81e02a17839bebd4a3fb5 [file] [log] [blame]
/* Copyright (c) 2015 Google Inc.
* Barret Rhoden <brho@cs.berkeley.edu>
* See LICENSE for details.
*
* recvmsg(), on top of recvfrom(). */
#include <sys/types.h>
#include <sys/socket.h>
#include <errno.h>
/* In recvfrom.c */
extern ssize_t __recvfrom_iov(int fd, const struct iovec *iov, int iovcnt,
int flags, __SOCKADDR_ARG from,
socklen_t * __restrict fromlen);
/* Receive a message as described by MSG from socket FD. Returns the number of
* bytes read or -1 for errors. */
ssize_t __recvmsg(int fd, struct msghdr *msg, int flags)
{
ssize_t ret;
ret = __recvfrom_iov(fd, msg->msg_iov, msg->msg_iovlen,
flags, msg->msg_name, &msg->msg_namelen);
if (ret == -1)
return ret;
/* On successful calls, there's extra info we can return via *msg */
msg->msg_controllen = 0;
msg->msg_flags = 0;
return ret;
}
weak_alias(__recvmsg, recvmsg)