Module Name:    src
Committed By:   christos
Date:           Fri Jun 22 18:28:38 UTC 2012

Modified Files:
        src/lib/libc/sys: Makefile.inc recv.2 send.2

Log Message:
{send,recv}mmsg glue


To generate a diff of this commit:
cvs rdiff -u -r1.214 -r1.215 src/lib/libc/sys/Makefile.inc
cvs rdiff -u -r1.31 -r1.32 src/lib/libc/sys/recv.2
cvs rdiff -u -r1.27 -r1.28 src/lib/libc/sys/send.2

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/lib/libc/sys/Makefile.inc
diff -u src/lib/libc/sys/Makefile.inc:1.214 src/lib/libc/sys/Makefile.inc:1.215
--- src/lib/libc/sys/Makefile.inc:1.214	Thu Mar  8 16:59:28 2012
+++ src/lib/libc/sys/Makefile.inc	Fri Jun 22 14:28:38 2012
@@ -1,4 +1,4 @@
-#	$NetBSD: Makefile.inc,v 1.214 2012/03/08 21:59:28 joerg Exp $
+#	$NetBSD: Makefile.inc,v 1.215 2012/06/22 18:28:38 christos Exp $
 #	@(#)Makefile.inc	8.3 (Berkeley) 10/24/94
 
 # sys sources
@@ -117,11 +117,11 @@ ASM=	access.S acct.S \
 		__posix_chown.S __posix_fchown.S __posix_lchown.S \
 		__posix_rename.S profil.S \
 	__quotactl.S \
-	rasctl.S readlinkat.S reboot.S recvfrom.S recvmsg.S rename.S \
+	rasctl.S readlinkat.S reboot.S recvfrom.S recvmmsg.S recvmsg.S rename.S \
 		renameat.S revoke.S rmdir.S \
 	semconfig.S semget.S semop.S \
-		sendmsg.S sendto.S setegid.S setcontext.S seteuid.S setgid.S \
-		setgroups.S __setitimer50.S __setlogin.S setpgid.S \
+		sendmmsg.S sendmsg.S sendto.S setegid.S setcontext.S seteuid.S \
+		setgid.S setgroups.S __setitimer50.S __setlogin.S setpgid.S \
 		setpriority.S \
 		setregid.S setreuid.S setrlimit.S setsid.S setsockopt.S \
 		setuid.S __shmctl50.S shmdt.S shmget.S shutdown.S \
@@ -305,9 +305,9 @@ MLINKS+=pathconf.2 fpathconf.2
 MLINKS+=pmc_control.2 pmc_get_info.2
 MLINKS+=poll.2 pollts.2
 MLINKS+=read.2 readv.2 read.2 pread.2 read.2 preadv.2
-MLINKS+=recv.2 recvfrom.2 recv.2 recvmsg.2
+MLINKS+=recv.2 recvfrom.2 recv.2 recvmsg.2 recv.2 recvmmsg.2
 MLINKS+=select.2 pselect.2
-MLINKS+=send.2 sendmsg.2 send.2 sendto.2
+MLINKS+=send.2 sendmsg.2 send.2 sendto.2 send.2 sendmmsg.2
 MLINKS+=setpgid.2 setpgrp.2
 MLINKS+=setuid.2 setegid.2 setuid.2 seteuid.2 setuid.2 setgid.2
 MLINKS+=shmat.2 shmdt.2

Index: src/lib/libc/sys/recv.2
diff -u src/lib/libc/sys/recv.2:1.31 src/lib/libc/sys/recv.2:1.32
--- src/lib/libc/sys/recv.2:1.31	Wed Feb  1 08:30:42 2012
+++ src/lib/libc/sys/recv.2	Fri Jun 22 14:28:38 2012
@@ -1,4 +1,4 @@
-.\"	$NetBSD: recv.2,v 1.31 2012/02/01 13:30:42 wiz Exp $
+.\"	$NetBSD: recv.2,v 1.32 2012/06/22 18:28:38 christos Exp $
 .\"
 .\" Copyright (c) 1983, 1990, 1991, 1993
 .\"	The Regents of the University of California.  All rights reserved.
@@ -35,7 +35,8 @@
 .Sh NAME
 .Nm recv ,
 .Nm recvfrom ,
-.Nm recvmsg
+.Nm recvmsg ,
+.Nm recvmmsg
 .Nd receive a message from a socket
 .Sh LIBRARY
 .Lb libc
@@ -47,10 +48,13 @@
 .Fn recvfrom "int s" "void * restrict buf" "size_t len" "int flags" "struct sockaddr * restrict from" "socklen_t * restrict fromlen"
 .Ft ssize_t
 .Fn recvmsg "int s" "struct msghdr *msg" "int flags"
+.Ft int
+.Fn recvmmsg "int s" "struct mmsghdr *mmsg" "unsigned int vlen" "unsigned int flags" "struct timespec *timeout"
 .Sh DESCRIPTION
-.Fn recvfrom
-and
+.Fn recvfrom ,
 .Fn recvmsg
+and
+.FN recvmmsg
 are used to receive messages from a socket,
 and may be used to receive data on a socket whether or not
 it is connection-oriented.
@@ -67,6 +71,50 @@ and modified on return to indicate the a
 address stored there.
 .Pp
 The
+.Fn recvmmsg
+call be used to receive multiple messages in the same call using an array of
+.Fa mmsghdr
+elements with the following form, as defined in
+.Ao Pa sys/socket.h Ac :
+.Pp 
+.Bd -literal
+struct mmsghdr {
+	struct msghdr	msg_hdr;	/* the message to be sent */
+	unsigned int	msg_len;	/* number of bytes received */
+};
+.Ed
+.Pp
+The 
+.Fa msg_len
+member contains the number of bytes received for each
+.Fa msg_hdr
+member.
+The array has
+.Fa vlen
+elements, which is limited to
+.Dv 1024 .
+If there is an error, a number fewer than
+.Fa vlen
+may be returned, and the error may be retrieved using
+.Xr getsockopt 2
+with
+.Dv SO_ERROR .
+If the flag
+.Dv MSG_WAITFORONE
+is set in
+.Fa flags
+then the
+.Fn recvmmsg
+call will wait for one message, and set
+.Dv MSG_DONTWAIT
+for the rest.
+If the
+.Fa timeout
+parameter is not NULL, then
+.Fn recvmmsg
+will return if that time is exceeded.
+.Pp
+The
 .Fn recv
 call is normally used only on a
 .Em connected
@@ -79,8 +127,14 @@ with a nil
 parameter.
 As it is redundant, it may not be supported in future releases.
 .Pp
-All three routines return the length of the message on successful
+.Fn recv ,
+.Fn recvfrom
+and
+.Fn recvmsg
+routines return the length of the message on successful
 completion.
+.Fn recvmmsg
+returns the number of messages received.
 If a message is too long to fit in the supplied buffer,
 excess bytes may be discarded depending on the type of socket
 the message is received from (see
@@ -231,10 +285,19 @@ for ancillary data.
 .Dv MSG_OOB
 is returned to indicate that expedited or out-of-band data were received.
 .Sh RETURN VALUES
-These calls return the number of bytes received, or \-1
+The 
+.Fn recv ,
+.Fn recvfrom
+and
+.Fn recvmsg
+calls return the number of bytes received, or \-1
 if an error occurred.
 For connected sockets whose remote peer was shut down,
 0 is returned when no more data is available.
+The
+.Fn recvmmsg
+calls return the number of messages received, or \-1
+if an error occurred.
 .Sh ERRORS
 The calls fail if:
 .Bl -tag -width Er
@@ -292,3 +355,9 @@ The
 .Fn recv
 function call appeared in
 .Bx 4.2 .
+The
+.Fn recvmmsg
+function call appeared on
+.Lx 2.6.32
+and
+.Nx 7 .

Index: src/lib/libc/sys/send.2
diff -u src/lib/libc/sys/send.2:1.27 src/lib/libc/sys/send.2:1.28
--- src/lib/libc/sys/send.2:1.27	Fri May  9 11:52:50 2008
+++ src/lib/libc/sys/send.2	Fri Jun 22 14:28:38 2012
@@ -1,4 +1,4 @@
-.\"	$NetBSD: send.2,v 1.27 2008/05/09 15:52:50 christos Exp $
+.\"	$NetBSD: send.2,v 1.28 2012/06/22 18:28:38 christos Exp $
 .\"
 .\" Copyright (c) 1983, 1991, 1993
 .\"	The Regents of the University of California.  All rights reserved.
@@ -29,13 +29,14 @@
 .\"
 .\"     @(#)send.2	8.2 (Berkeley) 2/21/94
 .\"
-.Dd May 9, 2008
+.Dd June 7, 2012
 .Dt SEND 2
 .Os
 .Sh NAME
 .Nm send ,
 .Nm sendto ,
-.Nm sendmsg
+.Nm sendmsg ,
+.Nm sendmmsg
 .Nd send a message from a socket
 .Sh LIBRARY
 .Lb libc
@@ -47,21 +48,55 @@
 .Fn sendto "int s" "const void *msg" "size_t len" "int flags" "const struct sockaddr *to" "socklen_t tolen"
 .Ft ssize_t
 .Fn sendmsg "int s" "const struct msghdr *msg" "int flags"
+.Ft int
+.Fn sendmmsg "int s" "struct mmsghdr *mmsg" "unsigned int vlen" "unsigned int flags"
 .Sh DESCRIPTION
 .Fn send ,
 .Fn sendto ,
+.Fn sendmsg ,
 and
-.Fn sendmsg
+.Fn sendmmsg
 are used to transmit a message to another socket.
 .Fn send
 may be used only when the socket is in a
 .Em connected
 state, while
-.Fn sendto
-and
+.Fn sendto ,
 .Fn sendmsg
+and
+.Fn sendmmsg
 may be used at any time.
 .Pp
+The
+.Fn sendmmsg
+call be used to send multiple messages in the same call using an array of
+.Fa mmsghdr
+elements with the following form, as defined in
+.Ao Pa sys/socket.h Ac :
+.Pp 
+.Bd -literal
+struct mmsghdr {
+	struct msghdr	msg_hdr;	/* the message to be sent */
+	unsigned int	msg_len;	/* number of bytes transmitted */
+};
+.Ed
+.Pp
+The 
+.Fa msg_len
+member contains the number of bytes sent for each
+.Fa msg_hdr
+member.
+The array has
+.Fa vlen
+elements, which is limited to
+.Dv 1024 .
+If there is an error, a number fewer than
+.Fa vlen
+may be returned, and the error may be retrieved using
+.Xr getsockopt 2
+with
+.Dv SO_ERROR .
+.Pp
 The address of the target is given by
 .Fa to
 with
@@ -90,6 +125,9 @@ or
 .Xr poll 2
 call may be used to determine when it is possible to
 send more data.
+Unfortunately this does not work when the interface queue which is used to
+send the message is full, and the call returns
+.Er ENOBUFS .
 .Pp
 The
 .Fa flags
@@ -139,13 +177,23 @@ is used to prevent
 generation when writing a socket that
 may be closed.
 .Sh RETURN VALUES
-The call returns the number of characters sent, or \-1
+The 
+.Fn send ,
+.Fn sendto ,
+and
+.Fn sendmsg
+calls return the number of characters sent, or \-1
 if an error occurred.
+The
+.Fn sendmmsg
+call returns the number of messages sent, or \-1
+if an error occured.
 .Sh ERRORS
 .Fn send ,
 .Fn sendto ,
+.Fn sendmsg ,
 and
-.Fn sendmsg
+.Fn sendmmsg
 fail if:
 .Bl -tag -width Er
 .It Bq Er EBADF
@@ -196,6 +244,8 @@ A destination address was specified and 
 .El
 .Pp
 .Fn sendmsg
+and
+.Fn sendmmsg
 will also fail if:
 .Bl -tag -width Er
 .It Bq Er EMSGSIZE
@@ -219,3 +269,9 @@ The
 .Fn send
 function call appeared in
 .Bx 4.2 .
+The
+.Fn sendmmsg
+function call appeared in
+.Lx 3.0
+and
+.Nx 7 .

Reply via email to