Index: distrib/sets/lists/base/ad.mips64eb
===================================================================
RCS file: /cvsroot/src/distrib/sets/lists/base/ad.mips64eb,v
retrieving revision 1.54
diff -u -u -r1.54 ad.mips64eb
--- distrib/sets/lists/base/ad.mips64eb	25 Jun 2011 00:42:57 -0000	1.54
+++ distrib/sets/lists/base/ad.mips64eb	25 Jun 2011 21:27:12 -0000
@@ -66,7 +66,7 @@
 ./usr/lib/64/libbz2.so.1			base-compat-shlib	compat,pic
 ./usr/lib/64/libbz2.so.1.1			base-compat-shlib	compat,pic
 ./usr/lib/64/libc.so.12				base-compat-shlib	compat,pic
-./usr/lib/64/libc.so.12.177			base-compat-shlib	compat,pic
+./usr/lib/64/libc.so.12.178			base-compat-shlib	compat,pic
 ./usr/lib/64/libcom_err.so.7			base-compat-shlib	compat,pic,kerberos
 ./usr/lib/64/libcom_err.so.7.0			base-compat-shlib	compat,pic,kerberos
 ./usr/lib/64/libcrypt.so.1			base-compat-shlib	compat,pic
@@ -343,7 +343,7 @@
 ./usr/lib/o32/libbz2.so.1			base-compat-shlib	compat,pic
 ./usr/lib/o32/libbz2.so.1.1			base-compat-shlib	compat,pic
 ./usr/lib/o32/libc.so.12			base-compat-shlib	compat,pic
-./usr/lib/o32/libc.so.12.177			base-compat-shlib	compat,pic
+./usr/lib/o32/libc.so.12.178			base-compat-shlib	compat,pic
 ./usr/lib/o32/libcom_err.so.7			base-compat-shlib	compat,pic,kerberos
 ./usr/lib/o32/libcom_err.so.7.0			base-compat-shlib	compat,pic,kerberos
 ./usr/lib/o32/libcrypt.so.1			base-compat-shlib	compat,pic
Index: distrib/sets/lists/base/ad.mips64el
===================================================================
RCS file: /cvsroot/src/distrib/sets/lists/base/ad.mips64el,v
retrieving revision 1.51
diff -u -u -r1.51 ad.mips64el
--- distrib/sets/lists/base/ad.mips64el	25 Jun 2011 00:42:58 -0000	1.51
+++ distrib/sets/lists/base/ad.mips64el	25 Jun 2011 21:27:12 -0000
@@ -66,7 +66,7 @@
 ./usr/lib/64/libbz2.so.1			base-compat-shlib	compat,pic
 ./usr/lib/64/libbz2.so.1.1			base-compat-shlib	compat,pic
 ./usr/lib/64/libc.so.12				base-compat-shlib	compat,pic
-./usr/lib/64/libc.so.12.177			base-compat-shlib	compat,pic
+./usr/lib/64/libc.so.12.178			base-compat-shlib	compat,pic
 ./usr/lib/64/libcom_err.so.7			base-compat-shlib	compat,pic,kerberos
 ./usr/lib/64/libcom_err.so.7.0			base-compat-shlib	compat,pic,kerberos
 ./usr/lib/64/libcrypt.so.1			base-compat-shlib	compat,pic
@@ -343,7 +343,7 @@
 ./usr/lib/o32/libbz2.so.1			base-compat-shlib	compat,pic
 ./usr/lib/o32/libbz2.so.1.1			base-compat-shlib	compat,pic
 ./usr/lib/o32/libc.so.12			base-compat-shlib	compat,pic
-./usr/lib/o32/libc.so.12.177			base-compat-shlib	compat,pic
+./usr/lib/o32/libc.so.12.178			base-compat-shlib	compat,pic
 ./usr/lib/o32/libcom_err.so.7			base-compat-shlib	compat,pic,kerberos
 ./usr/lib/o32/libcom_err.so.7.0			base-compat-shlib	compat,pic,kerberos
 ./usr/lib/o32/libcrypt.so.1			base-compat-shlib	compat,pic
Index: distrib/sets/lists/base/md.amd64
===================================================================
RCS file: /cvsroot/src/distrib/sets/lists/base/md.amd64,v
retrieving revision 1.125
diff -u -u -r1.125 md.amd64
--- distrib/sets/lists/base/md.amd64	25 Jun 2011 00:42:58 -0000	1.125
+++ distrib/sets/lists/base/md.amd64	25 Jun 2011 21:27:13 -0000
@@ -69,7 +69,7 @@
 ./usr/lib/i386/libbz2.so.1			base-compat-shlib	compat,pic
 ./usr/lib/i386/libbz2.so.1.1			base-compat-shlib	compat,pic
 ./usr/lib/i386/libc.so.12			base-compat-shlib	compat,pic
-./usr/lib/i386/libc.so.12.177			base-compat-shlib	compat,pic
+./usr/lib/i386/libc.so.12.178			base-compat-shlib	compat,pic
 ./usr/lib/i386/libcom_err.so.7			base-compat-shlib	compat,pic,kerberos
 ./usr/lib/i386/libcom_err.so.7.0		base-compat-shlib	compat,pic,kerberos
 ./usr/lib/i386/libcrypt.so.1			base-compat-shlib	compat,pic
Index: distrib/sets/lists/base/md.sparc64
===================================================================
RCS file: /cvsroot/src/distrib/sets/lists/base/md.sparc64,v
retrieving revision 1.118
diff -u -u -r1.118 md.sparc64
--- distrib/sets/lists/base/md.sparc64	25 Jun 2011 00:42:58 -0000	1.118
+++ distrib/sets/lists/base/md.sparc64	25 Jun 2011 21:27:13 -0000
@@ -67,7 +67,7 @@
 ./usr/lib/sparc/libbz2.so.1			base-compat-shlib	compat,pic
 ./usr/lib/sparc/libbz2.so.1.1			base-compat-shlib	compat,pic
 ./usr/lib/sparc/libc.so.12			base-compat-shlib	compat,pic
-./usr/lib/sparc/libc.so.12.177			base-compat-shlib	compat,pic
+./usr/lib/sparc/libc.so.12.178			base-compat-shlib	compat,pic
 ./usr/lib/sparc/libcom_err.so.7			base-compat-shlib	compat,pic,kerberos
 ./usr/lib/sparc/libcom_err.so.7.0		base-compat-shlib	compat,pic,kerberos
 ./usr/lib/sparc/libcrypt.so.1			base-compat-shlib	compat,pic
Index: distrib/sets/lists/base/shl.mi
===================================================================
RCS file: /cvsroot/src/distrib/sets/lists/base/shl.mi,v
retrieving revision 1.588
diff -u -u -r1.588 shl.mi
--- distrib/sets/lists/base/shl.mi	25 Jun 2011 00:42:58 -0000	1.588
+++ distrib/sets/lists/base/shl.mi	25 Jun 2011 21:27:14 -0000
@@ -15,7 +15,7 @@
 #
 ./lib/libc.so					base-sys-shlib		dynamicroot
 ./lib/libc.so.12				base-sys-shlib		dynamicroot
-./lib/libc.so.12.177				base-sys-shlib		dynamicroot
+./lib/libc.so.12.178				base-sys-shlib		dynamicroot
 ./lib/libcrypt.so				base-sys-shlib		dynamicroot
 ./lib/libcrypt.so.1				base-sys-shlib		dynamicroot
 ./lib/libcrypt.so.1.0				base-sys-shlib		dynamicroot
@@ -170,7 +170,7 @@
 ./usr/lib/libbz2.so.1.1				base-sys-shlib
 ./usr/lib/libc.so				base-sys-shlib
 ./usr/lib/libc.so.12				base-sys-shlib
-./usr/lib/libc.so.12.177			base-sys-shlib
+./usr/lib/libc.so.12.178			base-sys-shlib
 ./usr/lib/libcdk.so				base-obsolete		obsolete
 ./usr/lib/libcom_err.so				base-krb5-shlib		kerberos
 ./usr/lib/libcom_err.so.7			base-krb5-shlib		kerberos
Index: distrib/sets/lists/comp/ad.mips64eb
===================================================================
RCS file: /cvsroot/src/distrib/sets/lists/comp/ad.mips64eb,v
retrieving revision 1.35
diff -u -u -r1.35 ad.mips64eb
--- distrib/sets/lists/comp/ad.mips64eb	12 Jun 2011 20:23:29 -0000	1.35
+++ distrib/sets/lists/comp/ad.mips64eb	25 Jun 2011 21:27:15 -0000
@@ -1202,7 +1202,7 @@
 ./usr/libdata/debug/usr/lib/64/libbluetooth.so.4.2.debug	comp-sys-debug	debug,compat
 ./usr/libdata/debug/usr/lib/64/libbsdmalloc.so.0.0.debug	comp-sys-debug	debug,compat
 ./usr/libdata/debug/usr/lib/64/libbz2.so.1.1.debug		comp-sys-debug	debug,compat
-./usr/libdata/debug/usr/lib/64/libc.so.12.177.debug	comp-sys-debug	debug,compat
+./usr/libdata/debug/usr/lib/64/libc.so.12.178.debug	comp-sys-debug	debug,compat
 ./usr/libdata/debug/usr/lib/64/libcom_err.so.6.0.debug	 comp-compat-shlib	 compat,pic,kerberos,debug,obsolete
 ./usr/libdata/debug/usr/lib/64/libcom_err.so.7.0.debug	 comp-compat-shlib	 compat,pic,kerberos,debug
 ./usr/libdata/debug/usr/lib/64/libcrypt.so.1.0.debug	comp-sys-debug	debug,compat
@@ -1409,7 +1409,7 @@
 ./usr/libdata/debug/usr/lib/o32/libbluetooth.so.4.2.debug	comp-sys-debug	debug,compat
 ./usr/libdata/debug/usr/lib/o32/libbsdmalloc.so.0.0.debug	comp-sys-debug	debug,compat
 ./usr/libdata/debug/usr/lib/o32/libbz2.so.1.1.debug		comp-sys-debug	debug,compat
-./usr/libdata/debug/usr/lib/o32/libc.so.12.177.debug	comp-sys-debug	debug,compat
+./usr/libdata/debug/usr/lib/o32/libc.so.12.178.debug	comp-sys-debug	debug,compat
 ./usr/libdata/debug/usr/lib/o32/libcom_err.so.6.0.debug	 comp-compat-shlib	 compat,pic,kerberos,debug,obsolete
 ./usr/libdata/debug/usr/lib/o32/libcom_err.so.7.0.debug	 comp-compat-shlib	 compat,pic,kerberos,debug
 ./usr/libdata/debug/usr/lib/o32/libcrypt.so.1.0.debug	comp-sys-debug	debug,compat
Index: distrib/sets/lists/comp/ad.mips64el
===================================================================
RCS file: /cvsroot/src/distrib/sets/lists/comp/ad.mips64el,v
retrieving revision 1.35
diff -u -u -r1.35 ad.mips64el
--- distrib/sets/lists/comp/ad.mips64el	12 Jun 2011 20:23:29 -0000	1.35
+++ distrib/sets/lists/comp/ad.mips64el	25 Jun 2011 21:27:17 -0000
@@ -1202,7 +1202,7 @@
 ./usr/libdata/debug/usr/lib/64/libbluetooth.so.4.2.debug	comp-sys-debug	debug,compat
 ./usr/libdata/debug/usr/lib/64/libbsdmalloc.so.0.0.debug	comp-sys-debug	debug,compat
 ./usr/libdata/debug/usr/lib/64/libbz2.so.1.1.debug		comp-sys-debug	debug,compat
-./usr/libdata/debug/usr/lib/64/libc.so.12.177.debug	comp-sys-debug	debug,compat
+./usr/libdata/debug/usr/lib/64/libc.so.12.178.debug	comp-sys-debug	debug,compat
 ./usr/libdata/debug/usr/lib/64/libcom_err.so.6.0.debug	 comp-compat-shlib	 compat,pic,kerberos,debug,obsolete
 ./usr/libdata/debug/usr/lib/64/libcom_err.so.7.0.debug	 comp-compat-shlib	 compat,pic,kerberos,debug
 ./usr/libdata/debug/usr/lib/64/libcrypt.so.1.0.debug	comp-sys-debug	debug,compat
@@ -1409,7 +1409,7 @@
 ./usr/libdata/debug/usr/lib/o32/libbluetooth.so.4.2.debug	comp-sys-debug	debug,compat
 ./usr/libdata/debug/usr/lib/o32/libbsdmalloc.so.0.0.debug	comp-sys-debug	debug,compat
 ./usr/libdata/debug/usr/lib/o32/libbz2.so.1.1.debug		comp-sys-debug	debug,compat
-./usr/libdata/debug/usr/lib/o32/libc.so.12.177.debug	comp-sys-debug	debug,compat
+./usr/libdata/debug/usr/lib/o32/libc.so.12.178.debug	comp-sys-debug	debug,compat
 ./usr/libdata/debug/usr/lib/o32/libcom_err.so.6.0.debug	 comp-compat-shlib	 compat,pic,kerberos,debug,obsolete
 ./usr/libdata/debug/usr/lib/o32/libcom_err.so.7.0.debug	 comp-compat-shlib	 compat,pic,kerberos,debug
 ./usr/libdata/debug/usr/lib/o32/libcrypt.so.1.0.debug	comp-sys-debug	debug,compat
Index: distrib/sets/lists/comp/md.amd64
===================================================================
RCS file: /cvsroot/src/distrib/sets/lists/comp/md.amd64,v
retrieving revision 1.117
diff -u -u -r1.117 md.amd64
--- distrib/sets/lists/comp/md.amd64	6 Jun 2011 16:16:00 -0000	1.117
+++ distrib/sets/lists/comp/md.amd64	25 Jun 2011 21:27:18 -0000
@@ -973,7 +973,7 @@
 ./usr/libdata/debug/usr/lib/i386/libbluetooth.so.4.2.debug	comp-compat-shlib	compat,pic,debug
 ./usr/libdata/debug/usr/lib/i386/libbsdmalloc.so.0.0.debug	comp-compat-shlib	compat,pic,debug
 ./usr/libdata/debug/usr/lib/i386/libbz2.so.1.1.debug	comp-compat-shlib	compat,pic,debug
-./usr/libdata/debug/usr/lib/i386/libc.so.12.177.debug	comp-compat-shlib	compat,pic,debug
+./usr/libdata/debug/usr/lib/i386/libc.so.12.178.debug	comp-compat-shlib	compat,pic,debug
 ./usr/libdata/debug/usr/lib/i386/libcom_err.so.6.0.debug	comp-compat-shlib	compat,pic,kerberos,debug,obsolete
 ./usr/libdata/debug/usr/lib/i386/libcom_err.so.7.0.debug	comp-compat-shlib	compat,pic,kerberos,debug
 ./usr/libdata/debug/usr/lib/i386/libcrypt.so.1.0.debug	comp-compat-shlib	compat,pic,debug
Index: distrib/sets/lists/comp/md.sparc64
===================================================================
RCS file: /cvsroot/src/distrib/sets/lists/comp/md.sparc64,v
retrieving revision 1.102
diff -u -u -r1.102 md.sparc64
--- distrib/sets/lists/comp/md.sparc64	6 Jun 2011 16:16:00 -0000	1.102
+++ distrib/sets/lists/comp/md.sparc64	25 Jun 2011 21:27:19 -0000
@@ -861,7 +861,7 @@
 ./usr/libdata/debug/usr/lib/sparc/libbluetooth.so.4.2.debug		comp-compat-shlib	compat,pic,debug
 ./usr/libdata/debug/usr/lib/sparc/libbsdmalloc.so.0.0.debug		comp-compat-shlib	compat,pic,debug
 ./usr/libdata/debug/usr/lib/sparc/libbz2.so.1.1.debug			comp-compat-shlib	compat,pic,debug
-./usr/libdata/debug/usr/lib/sparc/libc.so.12.177.debug			comp-compat-shlib	compat,pic,debug
+./usr/libdata/debug/usr/lib/sparc/libc.so.12.178.debug			comp-compat-shlib	compat,pic,debug
 ./usr/libdata/debug/usr/lib/sparc/libcom_err.so.6.0.debug	comp-compat-shlib	compat,pic,kerberos,debug,obsolete
 ./usr/libdata/debug/usr/lib/sparc/libcom_err.so.7.0.debug	comp-compat-shlib	compat,pic,kerberos,debug
 ./usr/libdata/debug/usr/lib/sparc/libcrypt.so.1.0.debug			comp-compat-shlib	compat,pic,debug
Index: distrib/sets/lists/comp/mi
===================================================================
RCS file: /cvsroot/src/distrib/sets/lists/comp/mi,v
retrieving revision 1.1631
diff -u -u -r1.1631 mi
--- distrib/sets/lists/comp/mi	25 Jun 2011 05:45:11 -0000	1.1631
+++ distrib/sets/lists/comp/mi	25 Jun 2011 21:27:42 -0000
@@ -4303,6 +4303,7 @@
 ./usr/share/man/cat2/connect.0			comp-c-catman		.cat
 ./usr/share/man/cat2/dup.0			comp-c-catman		.cat
 ./usr/share/man/cat2/dup2.0			comp-c-catman		.cat
+./usr/share/man/cat2/dup3.0			comp-c-catman		.cat
 ./usr/share/man/cat2/errno.0			comp-c-catman		.cat
 ./usr/share/man/cat2/execve.0			comp-c-catman		.cat
 ./usr/share/man/cat2/extattr_delete_fd.0	comp-c-catman		.cat
@@ -4424,8 +4425,10 @@
 ./usr/share/man/cat2/ntp_adjtime.0		comp-c-catman		.cat
 ./usr/share/man/cat2/ntp_gettime.0		comp-c-catman		.cat
 ./usr/share/man/cat2/open.0			comp-c-catman		.cat
+./usr/share/man/cat2/paccept.0			comp-c-catman		.cat
 ./usr/share/man/cat2/pathconf.0			comp-c-catman		.cat
 ./usr/share/man/cat2/pipe.0			comp-c-catman		.cat
+./usr/share/man/cat2/pipe2.0			comp-c-catman		.cat
 ./usr/share/man/cat2/pmc_control.0		comp-c-catman		.cat
 ./usr/share/man/cat2/pmc_get_info.0		comp-c-catman		.cat
 ./usr/share/man/cat2/poll.0			comp-c-catman		.cat
@@ -10469,6 +10472,7 @@
 ./usr/share/man/html2/connect.html		comp-c-htmlman		html
 ./usr/share/man/html2/dup.html			comp-c-htmlman		html
 ./usr/share/man/html2/dup2.html			comp-c-htmlman		html
+./usr/share/man/html2/dup3.html			comp-c-htmlman		html
 ./usr/share/man/html2/errno.html		comp-c-htmlman		html
 ./usr/share/man/html2/execve.html		comp-c-htmlman		html
 ./usr/share/man/html2/extattr_delete_fd.html	comp-c-htmlman		html
@@ -10584,8 +10588,10 @@
 ./usr/share/man/html2/ntp_adjtime.html		comp-c-htmlman		html
 ./usr/share/man/html2/ntp_gettime.html		comp-c-htmlman		html
 ./usr/share/man/html2/open.html			comp-c-htmlman		html
+./usr/share/man/html2/paccept.html		comp-c-htmlman		html
 ./usr/share/man/html2/pathconf.html		comp-c-htmlman		html
 ./usr/share/man/html2/pipe.html			comp-c-htmlman		html
+./usr/share/man/html2/pipe2.html		comp-c-htmlman		html
 ./usr/share/man/html2/pmc_control.html		comp-c-htmlman		html
 ./usr/share/man/html2/pmc_get_info.html		comp-c-htmlman		html
 ./usr/share/man/html2/poll.html			comp-c-htmlman		html
@@ -16404,6 +16410,7 @@
 ./usr/share/man/man2/connect.2			comp-c-man		.man
 ./usr/share/man/man2/dup.2			comp-c-man		.man
 ./usr/share/man/man2/dup2.2			comp-c-man		.man
+./usr/share/man/man2/dup3.2			comp-c-man		.man
 ./usr/share/man/man2/errno.2			comp-c-man		.man
 ./usr/share/man/man2/execve.2			comp-c-man		.man
 ./usr/share/man/man2/extattr_delete_fd.2	comp-c-man		.man
@@ -16524,8 +16531,10 @@
 ./usr/share/man/man2/ntp_adjtime.2		comp-c-man		.man
 ./usr/share/man/man2/ntp_gettime.2		comp-c-man		.man
 ./usr/share/man/man2/open.2			comp-c-man		.man
+./usr/share/man/man2/paccept.2			comp-c-man		.man
 ./usr/share/man/man2/pathconf.2			comp-c-man		.man
 ./usr/share/man/man2/pipe.2			comp-c-man		.man
+./usr/share/man/man2/pipe2.2			comp-c-man		.man
 ./usr/share/man/man2/pmc_control.2		comp-c-man		.man
 ./usr/share/man/man2/pmc_get_info.2		comp-c-man		.man
 ./usr/share/man/man2/poll.2			comp-c-man		.man
Index: distrib/sets/lists/comp/shl.mi
===================================================================
RCS file: /cvsroot/src/distrib/sets/lists/comp/shl.mi,v
retrieving revision 1.175
diff -u -u -r1.175 shl.mi
--- distrib/sets/lists/comp/shl.mi	6 Jun 2011 16:16:00 -0000	1.175
+++ distrib/sets/lists/comp/shl.mi	25 Jun 2011 21:27:42 -0000
@@ -230,7 +230,7 @@
 ./usr/libdata/debug/usr/lib/libbluetooth.so.4.2.debug	comp-sys-debug	debug
 ./usr/libdata/debug/usr/lib/libbsdmalloc.so.0.0.debug	comp-sys-debug	debug
 ./usr/libdata/debug/usr/lib/libbz2.so.1.1.debug		comp-sys-debug	debug
-./usr/libdata/debug/usr/lib/libc.so.12.177.debug	comp-sys-debug	debug
+./usr/libdata/debug/usr/lib/libc.so.12.178.debug	comp-sys-debug	debug
 ./usr/libdata/debug/usr/lib/libcom_err.so.7.0.debug	comp-krb5-debug	kerberos,debug
 ./usr/libdata/debug/usr/lib/libcrypt.so.1.0.debug	comp-sys-debug	debug
 ./usr/libdata/debug/usr/lib/libcrypto.so.6.2.debug	comp-crypto-debug	crypto,debug
Index: include/unistd.h
===================================================================
RCS file: /cvsroot/src/include/unistd.h,v
retrieving revision 1.125
diff -u -u -r1.125 unistd.h
--- include/unistd.h	19 Jan 2011 19:21:29 -0000	1.125
+++ include/unistd.h	25 Jun 2011 21:29:42 -0000
@@ -300,6 +300,7 @@
 int	 closefrom(int);
 int	 des_cipher(const char *, char *, long, int);
 int	 des_setkey(const char *);
+int	 dup3(int, int, int);
 void	 endusershell(void);
 int	 exect(const char *, char * const *, char * const *);
 int	 fchroot(int);
@@ -315,11 +316,12 @@
 int	 iruserok(uint32_t, int, const char *, const char *);
 int      issetugid(void);
 int	 nfssvc(int, void *);
+int	 pipe2(int *, int);
 int	 profil(char *, size_t, u_long, u_int);
 #ifndef __PSIGNAL_DECLARED
 #define __PSIGNAL_DECLARED
 /* also in signal.h */
-void	psignal(int, const char *);
+void	 psignal(int, const char *);
 #endif /* __PSIGNAL_DECLARED */
 int	 rcmd(char **, int, const char *, const char *, const char *, int *);
 int	 reboot(int, char *);
Index: lib/libc/shlib_version
===================================================================
RCS file: /cvsroot/src/lib/libc/shlib_version,v
retrieving revision 1.222
diff -u -u -r1.222 shlib_version
--- lib/libc/shlib_version	12 Mar 2011 19:52:47 -0000	1.222
+++ lib/libc/shlib_version	25 Jun 2011 21:29:43 -0000
@@ -31,4 +31,4 @@
 #   it's insufficient bitwidth to implement all ctype class.
 #   see isblank's comment in ctype.h.
 major=12
-minor=177
+minor=178
Index: lib/libc/gen/popen.3
===================================================================
RCS file: /cvsroot/src/lib/libc/gen/popen.3,v
retrieving revision 1.16
diff -u -u -r1.16 popen.3
--- lib/libc/gen/popen.3	2 Aug 2007 23:45:10 -0000	1.16
+++ lib/libc/gen/popen.3	25 Jun 2011 21:29:45 -0000
@@ -29,7 +29,7 @@
 .\"
 .\"     @(#)popen.3	8.2 (Berkeley) 5/3/95
 .\"
-.Dd August 2, 2007
+.Dd June 24, 2011
 .Dt POPEN 3
 .Os
 .Sh NAME
@@ -76,6 +76,12 @@
 for writing, or
 .Ql r+
 for reading and writing.
+In addition if the character
+.Ql e
+is present in the
+.Fa type
+string, the file descriptor used internally is set to be closed on
+.Xr exec 2 .
 .Pp
 The
 .Fa command
Index: lib/libc/gen/popen.c
===================================================================
RCS file: /cvsroot/src/lib/libc/gen/popen.c,v
retrieving revision 1.30
diff -u -u -r1.30 popen.c
--- lib/libc/gen/popen.c	14 Nov 2010 18:11:42 -0000	1.30
+++ lib/libc/gen/popen.c	25 Jun 2011 21:29:45 -0000
@@ -54,6 +54,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
+#include <fcntl.h>
 
 #include "env.h"
 #include "reentrant.h"
@@ -84,22 +85,23 @@
 	const char * volatile xtype = type;
 	int pdes[2], pid, serrno;
 	volatile int twoway;
+	int flags;
 
 	_DIAGASSERT(command != NULL);
 	_DIAGASSERT(xtype != NULL);
 
+	flags = strchr(xtype, 'e') ? O_CLOEXEC : 0;
 	if (strchr(xtype, '+')) {
+		int stype = flags ? (SOCK_STREAM | SOCK_CLOEXEC) : SOCK_STREAM;
 		twoway = 1;
-		type = "r+";
-		if (socketpair(AF_LOCAL, SOCK_STREAM, 0, pdes) < 0)
-			return (NULL);
+		xtype = "r+";
+		if (socketpair(AF_LOCAL, stype, 0, pdes) < 0)
+			return NULL;
 	} else  {
 		twoway = 0;
-		if ((*xtype != 'r' && *xtype != 'w') || xtype[1] ||
-		    (pipe(pdes) < 0)) {
-			errno = EINVAL;
-			return (NULL);
-		}
+		xtype = strrchr(xtype, 'r') ? "r" : "w";
+		if (pipe2(pdes, flags) == -1)
+			return NULL;
 	}
 
 	if ((cur = malloc(sizeof(struct pid))) == NULL) {
Index: lib/libc/stdio/flags.c
===================================================================
RCS file: /cvsroot/src/lib/libc/stdio/flags.c,v
retrieving revision 1.14
diff -u -u -r1.14 flags.c
--- lib/libc/stdio/flags.c	7 Aug 2003 16:43:23 -0000	1.14
+++ lib/libc/stdio/flags.c	25 Jun 2011 21:29:46 -0000
@@ -55,9 +55,7 @@
  * Return 0 on error.
  */
 int
-__sflags(mode, optr)
-	const char *mode;
-	int *optr;
+__sflags(const char *mode, int *optr)
 {
 	int ret, m, o;
 
@@ -90,7 +88,8 @@
 
 	/*
 	 * [rwa]\+ or [rwa]b\+ means read and write 
-	 * f means open only plain files.
+	 * f means open only plain files,
+	 * e means set close on exec.
 	 */
 	for (; *mode; mode++)
 		switch (*mode) {
@@ -101,6 +100,9 @@
 		case 'f':
 			o |= O_NONBLOCK;
 			break;
+		case 'e':
+			o |= O_CLOEXEC;
+			break;
 		case 'b':
 			break;
 		default:	/* We could produce a warning here */
Index: lib/libc/stdio/fopen.3
===================================================================
RCS file: /cvsroot/src/lib/libc/stdio/fopen.3,v
retrieving revision 1.24
diff -u -u -r1.24 fopen.3
--- lib/libc/stdio/fopen.3	5 Apr 2010 21:34:47 -0000	1.24
+++ lib/libc/stdio/fopen.3	25 Jun 2011 21:29:46 -0000
@@ -33,7 +33,7 @@
 .\"
 .\"     @(#)fopen.3	8.1 (Berkeley) 6/4/93
 .\"
-.Dd June 4, 1993
+.Dd June 24, 2011
 .Dt FOPEN 3
 .Os
 .Sh NAME
@@ -84,14 +84,20 @@
 .Pp
 The
 .Fa mode
-string can also include the letter ``b'' either as a last character or
+string can also include the letter
+.Dq b
+either as a last character or
 as a character between the characters in any of the two-character strings
 described above.
 This is strictly for compatibility with
 .St -ansiC
-and has no effect; the ``b'' is ignored.
-.Pp
-The letter ``f'' in the mode string restricts fopen to regular
+and has no effect; the
+.Dq b
+is ignored.
+.Pp
+The letter
+.Dq f
+in the mode string restricts fopen to regular
 files; if the file opened is not a regular file,
 .Fn fopen
 will fail.
@@ -99,6 +105,16 @@
 .St -ansiC
 extension.
 .Pp
+the letter
+.Dq e
+in the mode string sets the close-on-exec flag in the file descriptors of
+the newly opened file files; if the operation fails,
+.Fn fopen
+will fail.
+This is a non
+.St -ansiC
+extension.
+.Pp
 Any created files will have mode
 .Pf \*q Dv S_IRUSR
 \&|
Index: lib/libc/sys/Makefile.inc
===================================================================
RCS file: /cvsroot/src/lib/libc/sys/Makefile.inc,v
retrieving revision 1.205
diff -u -u -r1.205 Makefile.inc
--- lib/libc/sys/Makefile.inc	6 Mar 2011 17:08:15 -0000	1.205
+++ lib/libc/sys/Makefile.inc	25 Jun 2011 21:29:46 -0000
@@ -77,7 +77,7 @@
 	bind.S \
 	chdir.S chflags.S chmod.S chown.S chroot.S __clock_getres50.S \
 		__clock_gettime50.S \
-	dup.S dup2.S  \
+	dup.S dup2.S dup3.S \
 	extattrctl.S \
 		extattr_delete_fd.S extattr_delete_file.S \
 		extattr_delete_link.S extattr_get_fd.S extattr_get_file.S \
@@ -92,7 +92,7 @@
 		getpriority.S getrlimit.S __getrusage50.S getsid.S \
 		getsockname.S getsockopt.S __gettimeofday50.S \
 	ioctl.S \
-	kqueue.S ktrace.S \
+	kqueue.S kqueue1.S ktrace.S \
 		_ksem_close.S _ksem_destroy.S _ksem_getvalue.S _ksem_init.S \
 		_ksem_post.S _ksem_trywait.S _ksem_unlink.S _ksem_wait.S \
 		_ksem_open.S \
@@ -107,8 +107,9 @@
 		mlock.S mlockall.S modctl.S __mount50.S mprotect.S \
 		__msgctl50.S msgget.S munlock.S munlockall.S munmap.S \
 	nfssvc.S __ntp_gettime50.S \
-	pathconf.S pmc_get_info.S pmc_control.S __posix_chown.S \
-		__posix_fchown.S __posix_lchown.S __posix_rename.S profil.S \
+	paccept.S pathconf.S pipe2.S pmc_get_info.S pmc_control.S \
+		__posix_chown.S __posix_fchown.S __posix_lchown.S \
+		__posix_rename.S profil.S \
 	__quotactl50.S \
 	rasctl.S reboot.S recvfrom.S recvmsg.S rename.S revoke.S \
 		rmdir.S \
@@ -242,6 +243,7 @@
 MLINKS+=brk.2 sbrk.2
 MLINKS+=clone.2 __clone.2
 MLINKS+=dup.2 dup2.2
+MLINKS+=dup.2 dup3.2
 MLINKS+=chdir.2 fchdir.2
 MLINKS+=chflags.2 fchflags.2 chflags.2 lchflags.2
 MLINKS+=chmod.2 fchmod.2 chmod.2 lchmod.2
@@ -308,3 +310,5 @@
 MLINKS+=utimes.2 futimes.2 utimes.2 lutimes.2
 MLINKS+=wait.2 wait3.2 wait.2 wait4.2 wait.2 waitpid.2
 MLINKS+=write.2 writev.2 write.2 pwrite.2 write.2 pwritev.2
+MLINKS+=pipe.2 pipe2.2
+MLINKS+=accept.2 paccept.2
Index: lib/libc/sys/accept.2
===================================================================
RCS file: /cvsroot/src/lib/libc/sys/accept.2,v
retrieving revision 1.26
diff -u -u -r1.26 accept.2
--- lib/libc/sys/accept.2	2 Jun 2011 01:04:18 -0000	1.26
+++ lib/libc/sys/accept.2	25 Jun 2011 21:29:47 -0000
@@ -33,7 +33,8 @@
 .Dt ACCEPT 2
 .Os
 .Sh NAME
-.Nm accept
+.Nm accept ,
+.Nm paccept
 .Nd accept a connection on a socket
 .Sh LIBRARY
 .Lb libc
@@ -41,6 +42,8 @@
 .In sys/socket.h
 .Ft int
 .Fn accept "int s" "struct sockaddr * restrict addr" "socklen_t * restrict addrlen"
+.Ft int
+.Fn paccept "int s" "struct sockaddr * restrict addr" "socklen_t * restrict addrlen" "const sigset_t * restrict sigmask" "int flags"
 .Sh DESCRIPTION
 The argument
 .Fa s
@@ -131,12 +134,41 @@
 call with providing only the control information,
 or by calling
 .Xr setsockopt 2 .
+.Pp
+The
+.Fn paccept
+function behaves exactly like
+.Fn accept ,
+but it also allows to set the following
+.Fa flags
+on the returned file descriptor:
+.Bl -column SOCK_NONBLOCK -offset indent
+.It Dv SOCK_CLOEXEC
+Set the close on exec property.
+.It Dv SOCK_NONBLOCK
+Sets non-blocking I/O.
+.El
+.Pp
+It can also temporarily replace the signal mask of the calling thread if
+.Fa sigmask
+is a non-null pointer, then the
+.Fn paccept
+function shall replace the signal mask of the caller by the set of
+signals pointed to by
+.Fa sigmask
+before waiting for a connection, and shall restore the signal mask
+of the calling thread before returning.
 .Sh RETURN VALUES
-The call returns \-1 on error.
-If it succeeds, it returns a non-negative
+The 
+.Fn accept
+and
+.Fn paccept calls return \-1 on error.
+If they succeed, they return a non-negative
 integer that is a descriptor for the accepted socket.
 .Sh COMPATIBILITY
-This implementation makes the new file descriptor inherit file flags
+The
+.Fn accept
+implementation makes the new file descriptor inherit file flags
 (like
 .Dv O_NONBLOCK )
 from the listening socket.
@@ -192,3 +224,7 @@
 .Fn accept
 function appeared in
 .Bx 4.2 .
+The
+.Fn pselect
+function is inspired from Linux and appeared in
+.Nx 6.0 .
Index: lib/libc/sys/dup.2
===================================================================
RCS file: /cvsroot/src/lib/libc/sys/dup.2,v
retrieving revision 1.21
diff -u -u -r1.21 dup.2
--- lib/libc/sys/dup.2	11 Jan 2009 02:46:30 -0000	1.21
+++ lib/libc/sys/dup.2	25 Jun 2011 21:29:47 -0000
@@ -29,12 +29,13 @@
 .\"
 .\"     @(#)dup.2	8.1 (Berkeley) 6/4/93
 .\"
-.Dd December 2, 2008
+.Dd June 24, 2011
 .Dt DUP 2
 .Os
 .Sh NAME
 .Nm dup ,
-.Nm dup2
+.Nm dup2 ,
+.Nm dup3
 .Nd duplicate an existing file descriptor
 .Sh LIBRARY
 .Lb libc
@@ -44,6 +45,8 @@
 .Fn dup "int oldd"
 .Ft int
 .Fn dup2 "int oldd" "int newd"
+.Ft int
+.Fn dup3 "int oldd" "int newd" "int flags"
 .Sh DESCRIPTION
 .Fn dup
 duplicates an existing object descriptor and returns its value to
@@ -100,6 +103,20 @@
 and
 .Fa oldd
 are the same, the call has no effect.
+.Pp
+.Fn dup3
+behaves exactly like
+.Fn dup2
+only it allows extra
+.Fa flags
+to be set on the returned file descriptor.
+The following flags are valid:
+.Bl -column O_NONBLOCK -offset indent
+.It Dv O_CLOEXEC
+Set the close on exec property.
+.It Dv O_NONBLOCK
+Sets non-blocking I/O.
+.El
 .Sh RETURN VALUES
 The value \-1 is returned if an error occurs in either call.
 The external variable
@@ -107,8 +124,9 @@
 indicates the cause of the error.
 .Sh ERRORS
 .Fn dup
-and
 .Fn dup2
+and
+.Fn dup3
 fail if:
 .Bl -tag -width Er
 .It Bq Er EBADF
@@ -136,3 +154,8 @@
 .Fn dup2
 functions conform to
 .St -p1003.1-90 .
+.Sh HISTORY
+The
+.Fn dup3
+function is inspired from Linux and appeared in
+.Nx 6.0 .
Index: lib/libc/sys/fcntl.2
===================================================================
RCS file: /cvsroot/src/lib/libc/sys/fcntl.2,v
retrieving revision 1.37
diff -u -u -r1.37 fcntl.2
--- lib/libc/sys/fcntl.2	17 May 2010 12:16:43 -0000	1.37
+++ lib/libc/sys/fcntl.2	25 Jun 2011 21:29:47 -0000
@@ -29,7 +29,7 @@
 .\"
 .\"     @(#)fcntl.2	8.2 (Berkeley) 1/12/94
 .\"
-.Dd May 17, 2010
+.Dd June 25, 2011
 .Dt FCNTL 2
 .Os
 .Sh NAME
@@ -55,7 +55,7 @@
 interpreted as an int by some commands and ignored by others.
 .Pp
 Commands are:
-.Bl -tag -width F_GETOWNX
+.Bl -tag -width F_DUPFD_CLOEXEC
 .It Dv F_DUPFD
 Return a new descriptor as follows:
 .Pp
@@ -80,6 +80,9 @@
 .Xr execve 2
 system calls.
 .El
+.It Dv F_DUPFD_CLOEXEC
+Same as F_DUPFD, but sets the close-on-exec property on the file descriptor
+created.
 .It Dv F_GETFD
 Get the close-on-exec flag associated with the file descriptor
 .Fa fd
Index: lib/libc/sys/kqueue.2
===================================================================
RCS file: /cvsroot/src/lib/libc/sys/kqueue.2,v
retrieving revision 1.30
diff -u -u -r1.30 kqueue.2
--- lib/libc/sys/kqueue.2	24 May 2011 02:31:11 -0000	1.30
+++ lib/libc/sys/kqueue.2	25 Jun 2011 21:29:47 -0000
@@ -32,11 +32,12 @@
 .\"
 .\" $FreeBSD: src/lib/libc/sys/kqueue.2,v 1.22 2001/06/27 19:55:57 dd Exp $
 .\"
-.Dd April 13, 2010
+.Dd June 24, 2011
 .Dt KQUEUE 2
 .Os
 .Sh NAME
 .Nm kqueue ,
+.Nm kqueue1 ,
 .Nm kevent
 .Nd kernel event notification mechanism
 .Sh LIBRARY
@@ -47,6 +48,8 @@
 .Ft int
 .Fn kqueue "void"
 .Ft int
+.Fn kqueue1 "int flags"
+.Ft int
 .Fn kevent "int kq" "const struct kevent *changelist" "size_t nchanges" "struct kevent *eventlist" "size_t nevents" "const struct timespec *timeout"
 .Fn EV_SET "\*[Am]kev" ident filter flags fflags data udata
 .Sh DESCRIPTION
@@ -78,6 +81,18 @@
 .Pp
 .Fn kqueue
 creates a new kernel event queue and returns a descriptor.
+.Pp
+The
+.Fn kqueue1
+also allows to set the following
+.Fa flags
+on the returned file descriptor:
+.Bl -column O_NONBLOCK -offset indent
+.It Dv O_CLOEXEC
+Set the close on exec property.
+.It Dv O_NONBLOCK
+Sets non-blocking I/O.
+.El
 The queue is not inherited by a child created with
 .Xr fork 2 .
 .\" However, if
@@ -617,3 +632,7 @@
 .Fx 4.1 ,
 and then in
 .Nx 2.0 .
+The
+.Fn kqueue1
+function first appeared in
+.Nx 6.0 .
Index: lib/libc/sys/pipe.2
===================================================================
RCS file: /cvsroot/src/lib/libc/sys/pipe.2,v
retrieving revision 1.22
diff -u -u -r1.22 pipe.2
--- lib/libc/sys/pipe.2	13 May 2004 10:20:58 -0000	1.22
+++ lib/libc/sys/pipe.2	25 Jun 2011 21:29:47 -0000
@@ -29,7 +29,7 @@
 .\"
 .\"     @(#)pipe.2	8.1 (Berkeley) 6/4/93
 .\"
-.Dd July 17, 1994
+.Dd June 24, 2011
 .Dt PIPE 2
 .Os
 .Sh NAME
@@ -41,6 +41,8 @@
 .In unistd.h
 .Ft int
 .Fn pipe "int fildes[2]"
+.Ft int
+.Fn pipe2 "int fildes[2]" "int flags"
 .Sh DESCRIPTION
 The
 .Fn pipe
@@ -78,6 +80,22 @@
 Widowing a pipe is the only way to deliver end-of-file to a reader:
 after the reader consumes any buffered data, reading a widowed pipe
 returns a zero count.
+.Pp
+The
+.Fn pipe2 
+function
+behaves exactly like
+.Fn pipe
+only it allows extra
+.Fa flags
+to be set on the returned file descriptor.
+The following flags are valid:
+.Bl -column O_NONBLOCK -offset indent
+.It Dv O_CLOEXEC
+Set the close on exec property.
+.It Dv O_NONBLOCK
+Sets non-blocking I/O.
+.El
 .Sh RETURN VALUES
 On successful creation of the pipe, zero is returned.
 Otherwise, a value of \-1 is returned and the variable
@@ -87,7 +105,9 @@
 .Sh ERRORS
 The
 .Fn pipe
-call will fail if:
+and
+.Fn pipe2
+calls will fail if:
 .Bl -tag -width Er
 .It Bq Er EMFILE
 Too many descriptors are active.
@@ -117,3 +137,7 @@
 .Fn pipe
 function call appeared in
 .At v6 .
+The
+.Fn pipe2
+function is inspired from Linux and appeared in
+.Nx 6.0 .
Index: lib/libc/sys/recv.2
===================================================================
RCS file: /cvsroot/src/lib/libc/sys/recv.2,v
retrieving revision 1.27
diff -u -u -r1.27 recv.2
--- lib/libc/sys/recv.2	23 Apr 2006 19:06:59 -0000	1.27
+++ lib/libc/sys/recv.2	25 Jun 2011 21:29:47 -0000
@@ -29,7 +29,7 @@
 .\"
 .\"     @(#)recv.2	8.3 (Berkeley) 2/21/94
 .\"
-.Dd April 23, 2006
+.Dd June 24, 2011
 .Dt RECV 2
 .Os
 .Sh NAME
@@ -116,7 +116,8 @@
 argument to a recv call is formed by
 .Em or Ap ing
 one or more of the values:
-.Bl -column MSG_WAITALL -offset indent
+.Bl -column MSG_CMSG_CLOEXEC -offset indent
+.It Dv MSG_CMSG_CLOEXEC Ta set the close on exec property for passed file descriptors
 .It Dv MSG_OOB Ta process out-of-band data
 .It Dv MSG_PEEK Ta peek at incoming message
 .It Dv MSG_WAITALL Ta wait for full request or error
Index: lib/libc/sys/socket.2
===================================================================
RCS file: /cvsroot/src/lib/libc/sys/socket.2,v
retrieving revision 1.36
diff -u -u -r1.36 socket.2
--- lib/libc/sys/socket.2	6 Sep 2007 09:32:52 -0000	1.36
+++ lib/libc/sys/socket.2	25 Jun 2011 21:29:48 -0000
@@ -78,6 +78,16 @@
 SOCK_RDM
 .Ed
 .Pp
+The following flags can be or'ed to the type to condition the returned
+file descriptor:
+The following flags are valid:
+.Bl -column SOCK_NONBLOCK -offset indent
+.It Dv SOCK_CLOEXEC
+Set the close on exec property.
+.It Dv SOCK_NONBLOCK
+Sets non-blocking I/O.
+.El
+.Pp
 A
 .Dv SOCK_STREAM
 type provides sequenced, reliable,
Index: lib/libc/sys/socketpair.2
===================================================================
RCS file: /cvsroot/src/lib/libc/sys/socketpair.2,v
retrieving revision 1.21
diff -u -u -r1.21 socketpair.2
--- lib/libc/sys/socketpair.2	20 Dec 2009 02:16:40 -0000	1.21
+++ lib/libc/sys/socketpair.2	25 Jun 2011 21:29:48 -0000
@@ -29,7 +29,7 @@
 .\"
 .\"     @(#)socketpair.2	8.1 (Berkeley) 6/4/93
 .\"
-.Dd December 20, 2009
+.Dd June 24, 2011
 .Dt SOCKETPAIR 2
 .Os
 .Sh NAME
@@ -57,6 +57,13 @@
 and
 .Fa sv Ns [1] .
 The two sockets are indistinguishable.
+.Pp
+The
+.Fa type
+and
+.Fa protocol
+argument values are described in
+.Xr socket 2 .
 .Sh RETURN VALUES
 A 0 is returned if the call succeeds, \-1 if it fails.
 .Sh ERRORS
@@ -81,6 +88,7 @@
 .Sh SEE ALSO
 .Xr pipe 2 ,
 .Xr read 2 ,
+.Xr socket 2 ,
 .Xr write 2
 .Sh HISTORY
 The
Index: sys/compat/svr4/svr4_stream.c
===================================================================
RCS file: /cvsroot/src/sys/compat/svr4/svr4_stream.c,v
retrieving revision 1.78
diff -u -u -r1.78 svr4_stream.c
--- sys/compat/svr4/svr4_stream.c	19 Nov 2010 06:44:38 -0000	1.78
+++ sys/compat/svr4/svr4_stream.c	25 Jun 2011 21:30:18 -0000
@@ -1682,7 +1682,8 @@
 		 * We are after a listen, so we try to accept...
 		 */
 
-		error = do_sys_accept(l, SCARG(uap, fd), &name, retval);
+		error = do_sys_accept(l, SCARG(uap, fd), &name, retval,
+		    NULL, 0, FNONBLOCK);
 		if (error != 0) {
 			DPRINTF(("getmsg: accept failed %d\n", error));
 			goto out;
Index: sys/kern/init_sysent.c
===================================================================
RCS file: /cvsroot/src/sys/kern/init_sysent.c,v
retrieving revision 1.254
diff -u -u -r1.254 init_sysent.c
--- sys/kern/init_sysent.c	6 Mar 2011 17:08:36 -0000	1.254
+++ sys/kern/init_sysent.c	25 Jun 2011 21:30:23 -0000
@@ -1,14 +1,14 @@
-/* $NetBSD: init_sysent.c,v 1.254 2011/03/06 17:08:36 bouyer Exp $ */
+/* $NetBSD$ */
 
 /*
  * System call switch table.
  *
  * DO NOT EDIT-- this file is automatically generated.
- * created from	NetBSD
+ * created from	NetBSD: syscalls.master,v 1.248 2011/03/09 22:12:45 pooka Exp
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: init_sysent.c,v 1.254 2011/03/06 17:08:36 bouyer Exp $");
+__KERNEL_RCSID(0, "$NetBSD$");
 
 #include "opt_modular.h"
 #include "opt_ntp.h"
@@ -16,6 +16,7 @@
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/signal.h>
+#include <sys/socket.h>
 #include <sys/mount.h>
 #include <sys/sched.h>
 #include <sys/syscallargs.h>
@@ -1097,14 +1098,14 @@
 	    (sy_call_t *)sys___fhstat50 },	/* 451 = __fhstat50 */
 	{ ns(struct sys___quotactl50_args), 0,
 	    (sy_call_t *)sys___quotactl50 },	/* 452 = __quotactl50 */
-	{ 0, 0, 0,
-	    sys_nosys },			/* 453 = filler */
-	{ 0, 0, 0,
-	    sys_nosys },			/* 454 = filler */
-	{ 0, 0, 0,
-	    sys_nosys },			/* 455 = filler */
-	{ 0, 0, 0,
-	    sys_nosys },			/* 456 = filler */
+	{ ns(struct sys_pipe2_args), 0,
+	    (sy_call_t *)sys_pipe2 },		/* 453 = pipe2 */
+	{ ns(struct sys_dup3_args), 0,
+	    (sy_call_t *)sys_dup3 },		/* 454 = dup3 */
+	{ ns(struct sys_kqueue1_args), 0,
+	    (sy_call_t *)sys_kqueue1 },		/* 455 = kqueue1 */
+	{ ns(struct sys_paccept_args), 0,
+	    (sy_call_t *)sys_paccept },		/* 456 = paccept */
 	{ 0, 0, 0,
 	    sys_nosys },			/* 457 = filler */
 	{ 0, 0, 0,
Index: sys/kern/kern_descrip.c
===================================================================
RCS file: /cvsroot/src/sys/kern/kern_descrip.c,v
retrieving revision 1.214
diff -u -u -r1.214 kern_descrip.c
--- sys/kern/kern_descrip.c	24 Apr 2011 20:30:38 -0000	1.214
+++ sys/kern/kern_descrip.c	25 Jun 2011 21:30:23 -0000
@@ -729,7 +729,7 @@
  * dup2 operation.
  */
 int
-fd_dup2(file_t *fp, unsigned new)
+fd_dup2(file_t *fp, unsigned new, int flags)
 {
 	filedesc_t *fdp = curlwp->l_fd;
 	fdfile_t *ff;
@@ -773,6 +773,8 @@
 	fd_used(fdp, new);
 	mutex_exit(&fdp->fd_lock);
 
+	dt->dt_ff[new]->ff_exclose = (flags & O_CLOEXEC) != 0;
+	fp->f_flag |= flags & FNONBLOCK;
 	/* Slot is now allocated.  Insert copy of the file. */
 	fd_affix(curproc, fp, new);
 	if (ff != NULL) {
Index: sys/kern/kern_event.c
===================================================================
RCS file: /cvsroot/src/sys/kern/kern_event.c,v
retrieving revision 1.71
diff -u -u -r1.71 kern_event.c
--- sys/kern/kern_event.c	10 Sep 2010 10:23:46 -0000	1.71
+++ sys/kern/kern_event.c	25 Jun 2011 21:30:24 -0000
@@ -714,8 +714,8 @@
 /*
  * kqueue(2) system call.
  */
-int
-sys_kqueue(struct lwp *l, const void *v, register_t *retval)
+static int
+kqueue1(struct lwp *l, int flags, register_t *retval)
 {
 	struct kqueue *kq;
 	file_t *fp;
@@ -723,7 +723,7 @@
 
 	if ((error = fd_allocfile(&fp, &fd)) != 0)
 		return error;
-	fp->f_flag = FREAD | FWRITE;
+	fp->f_flag = FREAD | FWRITE | (flags & FNONBLOCK);
 	fp->f_type = DTYPE_KQUEUE;
 	fp->f_ops = &kqueueops;
 	kq = kmem_zalloc(sizeof(*kq), KM_SLEEP);
@@ -734,11 +734,31 @@
 	fp->f_data = kq;
 	*retval = fd;
 	kq->kq_fdp = curlwp->l_fd;
+	fd_set_exclose(l, fd, (flags & O_CLOEXEC) != 0);
 	fd_affix(curproc, fp, fd);
 	return error;
 }
 
 /*
+ * kqueue(2) system call.
+ */
+int
+sys_kqueue(struct lwp *l, const void *v, register_t *retval)
+{
+	return kqueue1(l, 0, retval);
+}
+
+int
+sys_kqueue1(struct lwp *l, const struct sys_kqueue1_args *uap,
+    register_t *retval)
+{
+	/* {
+		syscallarg(int) flags;
+	} */
+	return kqueue1(l, SCARG(uap, flags), retval);
+}
+
+/*
  * kevent(2) system call.
  */
 int
Index: sys/kern/sys_descrip.c
===================================================================
RCS file: /cvsroot/src/sys/kern/sys_descrip.c,v
retrieving revision 1.21
diff -u -u -r1.21 sys_descrip.c
--- sys/kern/sys_descrip.c	12 Jun 2011 03:35:56 -0000	1.21
+++ sys/kern/sys_descrip.c	25 Jun 2011 21:30:26 -0000
@@ -122,41 +122,54 @@
 /*
  * Duplicate a file descriptor to a particular value.
  */
-int
-sys_dup2(struct lwp *l, const struct sys_dup2_args *uap, register_t *retval)
+static int
+dodup(struct lwp *l, int from, int to, int flags, register_t *retval)
 {
-	/* {
-		syscallarg(int)	from;
-		syscallarg(int)	to;
-	} */
-	int old, new, error;
+	int error;
 	file_t *fp;
 
-	old = SCARG(uap, from);
-	new = SCARG(uap, to);
-
-	if ((fp = fd_getfile(old)) == NULL) {
+	if ((fp = fd_getfile(from)) == NULL)
 		return EBADF;
-	}
 	mutex_enter(&fp->f_lock);
 	fp->f_count++;
 	mutex_exit(&fp->f_lock);
-	fd_putfile(old);
+	fd_putfile(from);
 
-	if ((u_int)new >= curproc->p_rlimit[RLIMIT_NOFILE].rlim_cur ||
-	    (u_int)new >= maxfiles) {
+	if ((u_int)to >= curproc->p_rlimit[RLIMIT_NOFILE].rlim_cur ||
+	    (u_int)to >= maxfiles)
 		error = EBADF;
-	} else if (old == new) {
+	else if (from == to)
 		error = 0;
-	} else {
-		error = fd_dup2(fp, new);
-	}
+	else
+		error = fd_dup2(fp, to, flags);
 	closef(fp);
-	*retval = new;
+	*retval = to;
 
 	return error;
 }
 
+int
+sys_dup3(struct lwp *l, const struct sys_dup3_args *uap, register_t *retval)
+{
+	/* {
+		syscallarg(int)	from;
+		syscallarg(int)	to;
+		syscallarg(int)	flags;
+	} */
+	return dodup(l, SCARG(uap, from), SCARG(uap, to), SCARG(uap, flags),
+	    retval);
+}
+
+int
+sys_dup2(struct lwp *l, const struct sys_dup2_args *uap, register_t *retval)
+{
+	/* {
+		syscallarg(int)	from;
+		syscallarg(int)	to;
+	} */
+	return dodup(l, SCARG(uap, from), SCARG(uap, to), 0, retval);
+}
+
 /*
  * fcntl call which is being passed to the file's fs.
  */
@@ -316,6 +329,7 @@
 	filedesc_t *fdp;
 	file_t *fp;
 	struct flock fl;
+	bool cloexec = false;
 
 	fd = SCARG(uap, fd);
 	cmd = SCARG(uap, cmd);
@@ -365,6 +379,9 @@
 	}
 
 	switch (cmd) {
+	case F_DUPFD_CLOEXEC:
+		cloexec = true;
+		/*FALLTHROUGH*/
 	case F_DUPFD:
 		newmin = (long)SCARG(uap, arg);
 		if ((u_int)newmin >=
@@ -373,7 +390,7 @@
 			fd_putfile(fd);
 			return EINVAL;
 		}
-		error = fd_dup(fp, newmin, &i, false);
+		error = fd_dup(fp, newmin, &i, cloexec);
 		*retval = i;
 		break;
 
@@ -722,3 +739,25 @@
 
 	return 0;
 }
+
+int
+sys_pipe(struct lwp *l, const void *v, register_t *retval)
+{
+	return pipe1(l, retval, 0);
+}
+
+int
+sys_pipe2(struct lwp *l, const struct sys_pipe2_args *uap, register_t *retval)
+{
+	/* {
+		syscallarg(int[2]) fildes;
+		syscallarg(int) flags;
+	} */
+	int fd[2], error;
+
+	if ((error = pipe1(l, retval, SCARG(uap, flags))) != 0)
+		return error;
+	fd[0] = retval[0];
+	fd[1] = retval[1];
+	return copyout(fd, SCARG(uap, fildes), sizeof(fd));
+}
Index: sys/kern/sys_pipe.c
===================================================================
RCS file: /cvsroot/src/sys/kern/sys_pipe.c,v
retrieving revision 1.130
diff -u -u -r1.130 sys_pipe.c
--- sys/kern/sys_pipe.c	10 Apr 2011 15:45:33 -0000	1.130
+++ sys/kern/sys_pipe.c	25 Jun 2011 21:30:26 -0000
@@ -295,12 +295,6 @@
 	return (error);
 }
 
-int
-sys_pipe(struct lwp *l, const void *v, register_t *retval)
-{
-	return pipe1(l, retval, 0);
-}
-
 /*
  * Allocate kva for pipe circular buffer, the space is pageable
  * This routine will 'realloc' the size of a pipe safely, if it fails
Index: sys/kern/syscalls.c
===================================================================
RCS file: /cvsroot/src/sys/kern/syscalls.c,v
retrieving revision 1.245
diff -u -u -r1.245 syscalls.c
--- sys/kern/syscalls.c	6 Mar 2011 17:08:36 -0000	1.245
+++ sys/kern/syscalls.c	25 Jun 2011 21:30:27 -0000
@@ -1,14 +1,14 @@
-/* $NetBSD: syscalls.c,v 1.245 2011/03/06 17:08:36 bouyer Exp $ */
+/* $NetBSD$ */
 
 /*
  * System call names.
  *
  * DO NOT EDIT-- this file is automatically generated.
- * created from	NetBSD
+ * created from	NetBSD: syscalls.master,v 1.248 2011/03/09 22:12:45 pooka Exp
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: syscalls.c,v 1.245 2011/03/06 17:08:36 bouyer Exp $");
+__KERNEL_RCSID(0, "$NetBSD$");
 
 #if defined(_KERNEL_OPT)
 #include "opt_modular.h"
@@ -17,6 +17,7 @@
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/signal.h>
+#include <sys/socket.h>
 #include <sys/mount.h>
 #include <sys/sched.h>
 #include <sys/syscallargs.h>
@@ -541,10 +542,10 @@
 	/* 450 */	"__mknod50",
 	/* 451 */	"__fhstat50",
 	/* 452 */	"__quotactl50",
-	/* 453 */	"# filler",
-	/* 454 */	"# filler",
-	/* 455 */	"# filler",
-	/* 456 */	"# filler",
+	/* 453 */	"pipe2",
+	/* 454 */	"dup3",
+	/* 455 */	"kqueue1",
+	/* 456 */	"paccept",
 	/* 457 */	"# filler",
 	/* 458 */	"# filler",
 	/* 459 */	"# filler",
Index: sys/kern/syscalls.conf
===================================================================
RCS file: /cvsroot/src/sys/kern/syscalls.conf,v
retrieving revision 1.16
diff -u -u -r1.16 syscalls.conf
--- sys/kern/syscalls.conf	18 Jan 2011 17:33:05 -0000	1.16
+++ sys/kern/syscalls.conf	25 Jun 2011 21:30:27 -0000
@@ -4,7 +4,7 @@
 sysnumhdr="../sys/syscall.h"
 syssw="init_sysent.c"
 sysarghdr="../sys/syscallargs.h"
-sysarghdrextra='#include <sys/mount.h>\n#include <sys/sched.h>\n\n'
+sysarghdrextra='#include <sys/mount.h>\n#include <sys/sched.h>\n#include <sys/socket.h>\n\n'
 sysalign=1
 rumpcalls="../rump/librump/rumpkern/rump_syscalls.c"
 rumpcallshdr="../rump/include/rump/rump_syscalls.h"
Index: sys/kern/syscalls.master
===================================================================
RCS file: /cvsroot/src/sys/kern/syscalls.master,v
retrieving revision 1.248
diff -u -u -r1.248 syscalls.master
--- sys/kern/syscalls.master	9 Mar 2011 22:12:45 -0000	1.248
+++ sys/kern/syscalls.master	25 Jun 2011 21:30:27 -0000
@@ -51,6 +51,7 @@
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/signal.h>
+#include <sys/socket.h>
 #include <sys/mount.h>
 #include <sys/sched.h>
 #include <sys/syscallargs.h>
@@ -106,13 +107,13 @@
 			    const struct msghdr *msg, int flags); }
 29	STD 	RUMP	{ ssize_t|sys||recvfrom(int s, void *buf, size_t len, \
 			    int flags, struct sockaddr *from, \
-			    unsigned int *fromlenaddr); }
+			    socklen_t *fromlenaddr); }
 30	STD	RUMP	{ int|sys||accept(int s, struct sockaddr *name, \
-			    unsigned int *anamelen); }
+			    socklen_t *anamelen); }
 31	STD	RUMP	{ int|sys||getpeername(int fdes, struct sockaddr *asa, \
-			    unsigned int *alen); }
+			    socklen_t *alen); }
 32	STD	RUMP	{ int|sys||getsockname(int fdes, struct sockaddr *asa, \
-			    unsigned int *alen); }
+			    socklen_t *alen); }
 33	STD 	RUMP	{ int|sys||access(const char *path, int flags); }
 34	STD 	 RUMP	{ int|sys||chflags(const char *path, u_long flags); }
 35	STD 	RUMP	{ int|sys||fchflags(int fd, u_long flags); }
@@ -206,9 +207,9 @@
 96	STD 		{ int|sys||setpriority(int which, id_t who, int prio); }
 97	COMPAT_30 MODULAR { int|sys||socket(int domain, int type, int protocol); }
 98	STD	RUMP	{ int|sys||connect(int s, const struct sockaddr *name, \
-			    unsigned int namelen); }
+			    socklen_t namelen); }
 99	COMPAT_43 MODULAR { int|sys||accept(int s, void *name, \
-			    int *anamelen); } oaccept
+			    socklen_t *anamelen); } oaccept
 100	STD 		{ int|sys||getpriority(int which, id_t who); }
 101	COMPAT_43 MODULAR { int|sys||send(int s, void *buf, int len, \
 			    int flags); } osend
@@ -217,9 +218,9 @@
 103	COMPAT_13 MODULAR { int|sys||sigreturn(struct sigcontext13 *sigcntxp); } \
 			    sigreturn13
 104	STD	RUMP	{ int|sys||bind(int s, const struct sockaddr *name, \
-			    unsigned int namelen); }
+			    socklen_t namelen); }
 105	STD	RUMP	{ int|sys||setsockopt(int s, int level, int name, \
-			    const void *val, unsigned int valsize); }
+			    const void *val, socklen_t valsize); }
 106	STD	RUMP	{ int|sys||listen(int s, int backlog); }
 107	OBSOL		vtimes
 108	COMPAT_43 MODULAR { int|sys||sigvec(int signum, struct sigvec *nsv, \
@@ -238,7 +239,7 @@
 			    void *tzp); }
 117	COMPAT_50 MODULAR { int|sys||getrusage(int who, struct rusage50 *rusage); }
 118	STD	RUMP	{ int|sys||getsockopt(int s, int level, int name, \
-			    void *val, unsigned int *avalsize); }
+			    void *val, socklen_t *avalsize); }
 119	OBSOL		resuba
 120	STD 	RUMP	{ ssize_t|sys||readv(int fd, \
 			    const struct iovec *iovp, int iovcnt); }
@@ -249,7 +250,7 @@
 123	STD 	 RUMP	{ int|sys||fchown(int fd, uid_t uid, gid_t gid); }
 124	STD 	 RUMP	{ int|sys||fchmod(int fd, mode_t mode); }
 125	COMPAT_43 MODULAR { int|sys||recvfrom(int s, void *buf, size_t len, \
-			    int flags, void *from, int *fromlenaddr); } \
+			    int flags, void *from, socklen_t *fromlenaddr); } \
 			    orecvfrom
 126	STD 	RUMP	{ int|sys||setreuid(uid_t ruid, uid_t euid); }
 127	STD 	RUMP	{ int|sys||setregid(gid_t rgid, gid_t egid); }
@@ -261,7 +262,7 @@
 132	STD 	 RUMP	{ int|sys||mkfifo(const char *path, mode_t mode); }
 133	STD 	 RUMP	{ ssize_t|sys||sendto(int s, const void *buf, \
 			    size_t len, int flags, const struct sockaddr *to, \
-			    unsigned int tolen); }
+			    socklen_t tolen); }
 134	STD	 RUMP	{ int|sys||shutdown(int s, int how); }
 135	STD	 RUMP	{ int|sys||socketpair(int domain, int type, \
 			    int protocol, int *rsv); }
@@ -273,7 +274,7 @@
 140	COMPAT_50 MODULAR { int|sys||adjtime(const struct timeval50 *delta, \
 			    struct timeval50 *olddelta); }
 141	COMPAT_43 MODULAR { int|sys||getpeername(int fdes, void *asa, \
-			    int *alen); } ogetpeername
+			    socklen_t *alen); } ogetpeername
 142	COMPAT_43 MODULAR { int32_t|sys||gethostid(void); } ogethostid
 143	COMPAT_43 MODULAR { int|sys||sethostid(int32_t hostid); } osethostid
 144	COMPAT_43 MODULAR { int|sys||getrlimit(int which, \
@@ -286,7 +287,7 @@
 			    int uid, void *arg); }
 149	COMPAT_43 MODULAR { int|sys||quota(void); } oquota
 150	COMPAT_43 MODULAR { int|sys||getsockname(int fdec, void *asa, \
-			    int *alen); } ogetsockname
+			    socklen_t *alen); } ogetsockname
 
 ; Syscalls 151-180 inclusive are reserved for vendor-specific
 ; system calls.  (This includes various calls added for compatibity
@@ -886,3 +887,9 @@
 			    size_t fh_size, struct stat *sb); }
 452	STD  RUMP	{ int|sys|50|quotactl(const char *path, \
 			    struct plistref *pref); }
+453	STD  RUMP	{ int|sys||pipe2(int *fildes, int flags); }
+454	STD  RUMP	{ int|sys||dup3(int from, int to, int flags); }
+455	STD  RUMP	{ int|sys||kqueue1(int flags); }
+456	STD  RUMP	{ int|sys||paccept(int s, struct sockaddr *name, \
+			    socklen_t *anamelen, const sigset_t *mask, \
+			    int flags); }
Index: sys/kern/uipc_socket.c
===================================================================
RCS file: /cvsroot/src/sys/kern/uipc_socket.c,v
retrieving revision 1.203
diff -u -u -r1.203 uipc_socket.c
--- sys/kern/uipc_socket.c	1 Feb 2011 01:39:20 -0000	1.203
+++ sys/kern/uipc_socket.c	25 Jun 2011 21:30:28 -0000
@@ -598,10 +598,13 @@
 	struct socket	*so;
 	struct file	*fp;
 	int		fd, error;
+	int		flags = type & SOCK_FLAGS_MASK;
 
+	type &= ~SOCK_FLAGS_MASK;
 	if ((error = fd_allocfile(&fp, &fd)) != 0)
-		return (error);
-	fp->f_flag = FREAD|FWRITE;
+		return error;
+	fd_set_exclose(l, fd, (flags & SOCK_CLOEXEC) != 0);
+	fp->f_flag = FREAD|FWRITE|((flags & SOCK_NONBLOCK) ? FNONBLOCK : 0);
 	fp->f_type = DTYPE_SOCKET;
 	fp->f_ops = &socketops;
 	error = socreate(domain, &so, type, protocol, l, NULL);
@@ -1379,7 +1382,9 @@
 				    type == SCM_RIGHTS) {
 					sounlock(so);
 					splx(s);
-					error = (*dom->dom_externalize)(cm, l);
+					error = (*dom->dom_externalize)(cm, l,
+					    (flags & MSG_CMSG_CLOEXEC) ?
+					    O_CLOEXEC : 0);
 					s = splsoftnet();
 					solock(so);
 				}
Index: sys/kern/uipc_syscalls.c
===================================================================
RCS file: /cvsroot/src/sys/kern/uipc_syscalls.c,v
retrieving revision 1.143
diff -u -u -r1.143 uipc_syscalls.c
--- sys/kern/uipc_syscalls.c	24 Apr 2011 18:46:23 -0000	1.143
+++ sys/kern/uipc_syscalls.c	25 Jun 2011 21:30:29 -0000
@@ -164,7 +164,8 @@
 }
 
 int
-do_sys_accept(struct lwp *l, int sock, struct mbuf **name, register_t *new_sock)
+do_sys_accept(struct lwp *l, int sock, struct mbuf **name, register_t *new_sock,
+    const sigset_t *mask, int flags, int clrflags)
 {
 	file_t		*fp, *fp2;
 	struct mbuf	*nam;
@@ -186,6 +187,10 @@
 	*new_sock = fd;
 	so = fp->f_data;
 	solock(so);
+
+	if (__predict_false(mask))
+		sigsuspendsetup(l, mask);
+
 	if (!(so->so_proto->pr_flags & PR_LISTEN)) {
 		error = EOPNOTSUPP;
 		goto bad;
@@ -224,7 +229,8 @@
 	if (soqremque(so2, 1) == 0)
 		panic("accept");
 	fp2->f_type = DTYPE_SOCKET;
-	fp2->f_flag = fp->f_flag;
+	fp2->f_flag = (fp->f_flag & ~clrflags) |
+	    ((flags & SOCK_NONBLOCK) ? FNONBLOCK : 0); 
 	fp2->f_ops = &socketops;
 	fp2->f_data = so2;
 	error = soaccept(so2, nam);
@@ -239,16 +245,21 @@
 		closef(fp2);
 		fd_abort(curproc, NULL, fd);
 	} else {
+		fd_set_exclose(l, fd, (flags & SOCK_CLOEXEC) != 0);
 		fd_affix(curproc, fp2, fd);
 		*name = nam;
 	}
 	fd_putfile(sock);
+	if (__predict_false(mask))
+		sigsuspendteardown(l);
 	return (error);
  bad:
  	sounlock(so);
  	m_freem(nam);
 	fd_putfile(sock);
  	fd_abort(curproc, fp2, fd);
+	if (__predict_false(mask))
+		sigsuspendteardown(l);
  	return (error);
 }
 
@@ -263,7 +274,46 @@
 	int error, fd;
 	struct mbuf *name;
 
-	error = do_sys_accept(l, SCARG(uap, s), &name, retval);
+	error = do_sys_accept(l, SCARG(uap, s), &name, retval, NULL, 0, 0);
+	if (error != 0)
+		return error;
+	error = copyout_sockname(SCARG(uap, name), SCARG(uap, anamelen),
+	    MSG_LENUSRSPACE, name);
+	if (name != NULL)
+		m_free(name);
+	if (error != 0) {
+		fd = (int)*retval;
+		if (fd_getfile(fd) != NULL)
+			(void)fd_close(fd);
+	}
+	return error;
+}
+
+int
+sys_paccept(struct lwp *l, const struct sys_paccept_args *uap,
+    register_t *retval)
+{
+	/* {
+		syscallarg(int)			s;
+		syscallarg(struct sockaddr *)	name;
+		syscallarg(unsigned int *)	anamelen;
+		syscallarg(const sigset_t *)	mask;
+		syscallarg(int)			flags;
+	} */
+	int error, fd;
+	struct mbuf *name;
+	sigset_t *mask, amask;
+
+	if (SCARG(uap, mask) != NULL) {
+		error = copyin(SCARG(uap, mask), &amask, sizeof(amask));
+		if (error)
+			return error;
+		mask = &amask;
+	} else
+		mask = NULL;
+
+	error = do_sys_accept(l, SCARG(uap, s), &name, retval, mask,
+	    SCARG(uap, flags), FNONBLOCK);
 	if (error != 0)
 		return error;
 	error = copyout_sockname(SCARG(uap, name), SCARG(uap, anamelen),
@@ -364,26 +414,31 @@
 	struct socket	*so1, *so2;
 	int		fd, error, sv[2];
 	proc_t		*p;
+	int		flags = SCARG(uap, type) & SOCK_FLAGS_MASK;
+	int		type = SCARG(uap, type) & ~SOCK_FLAGS_MASK;
+	int		fnonblock = (flags & SOCK_NONBLOCK) ? FNONBLOCK : 0; 
 
 	p = curproc;
-	error = socreate(SCARG(uap, domain), &so1, SCARG(uap, type),
+	error = socreate(SCARG(uap, domain), &so1, type,
 	    SCARG(uap, protocol), l, NULL);
 	if (error)
 		return (error);
-	error = socreate(SCARG(uap, domain), &so2, SCARG(uap, type),
+	error = socreate(SCARG(uap, domain), &so2, type,
 	    SCARG(uap, protocol), l, so1);
 	if (error)
 		goto free1;
 	if ((error = fd_allocfile(&fp1, &fd)) != 0)
 		goto free2;
+	fd_set_exclose(l, fd, (flags & SOCK_CLOEXEC) != 0);
 	sv[0] = fd;
-	fp1->f_flag = FREAD|FWRITE;
+	fp1->f_flag = FREAD|FWRITE|fnonblock;
 	fp1->f_type = DTYPE_SOCKET;
 	fp1->f_ops = &socketops;
 	fp1->f_data = so1;
 	if ((error = fd_allocfile(&fp2, &fd)) != 0)
 		goto free3;
-	fp2->f_flag = FREAD|FWRITE;
+	fd_set_exclose(l, fd, (flags & SOCK_CLOEXEC) != 0);
+	fp2->f_flag = FREAD|FWRITE|fnonblock;
 	fp2->f_type = DTYPE_SOCKET;
 	fp2->f_ops = &socketops;
 	fp2->f_data = so2;
@@ -1006,12 +1061,6 @@
 	(void)soclose(rso);
 	return (error);
 }
-
-int
-sys_pipe(struct lwp *l, const void *v, register_t *retval)
-{
-	return pipe1(l, retval, 0);
-}
 #endif /* PIPE_SOCKETPAIR */
 
 /*
Index: sys/kern/uipc_usrreq.c
===================================================================
RCS file: /cvsroot/src/sys/kern/uipc_usrreq.c,v
retrieving revision 1.135
diff -u -u -r1.135 uipc_usrreq.c
--- sys/kern/uipc_usrreq.c	12 Jun 2011 03:35:56 -0000	1.135
+++ sys/kern/uipc_usrreq.c	25 Jun 2011 21:30:30 -0000
@@ -1233,7 +1233,7 @@
 #endif
 
 int
-unp_externalize(struct mbuf *rights, struct lwp *l)
+unp_externalize(struct mbuf *rights, struct lwp *l, int flags)
 {
 	struct cmsghdr *cm = mtod(rights, struct cmsghdr *);
 	struct proc *p = l->l_proc;
@@ -1316,9 +1316,11 @@
 	 */
 	rp = (file_t **)CMSG_DATA(cm);
 	for (i = 0; i < nfds; i++) {
+		int fd = fdp[i];
 		fp = *rp++;
 		atomic_dec_uint(&unp_rights);
-		fd_affix(p, fp, fdp[i]);
+		fd_set_exclose(l, fd, (flags & O_CLOEXEC) != 0);
+		fd_affix(p, fp, fd);
 		mutex_enter(&fp->f_lock);
 		fp->f_msgcount--;
 		mutex_exit(&fp->f_lock);
Index: sys/rump/include/rump/rump_syscalls.h
===================================================================
RCS file: /cvsroot/src/sys/rump/include/rump/rump_syscalls.h,v
retrieving revision 1.49
diff -u -u -r1.49 rump_syscalls.h
--- sys/rump/include/rump/rump_syscalls.h	8 Mar 2011 18:31:11 -0000	1.49
+++ sys/rump/include/rump/rump_syscalls.h	25 Jun 2011 21:30:37 -0000
@@ -1,10 +1,10 @@
-/* $NetBSD: rump_syscalls.h,v 1.49 2011/03/08 18:31:11 pooka Exp $ */
+/* $NetBSD$ */
 
 /*
  * System call protos in rump namespace.
  *
  * DO NOT EDIT-- this file is automatically generated.
- * created from	NetBSD: syscalls.master,v 1.246 2011/03/06 17:08:36 bouyer Exp
+ * created from	NetBSD: syscalls.master,v 1.248 2011/03/09 22:12:45 pooka Exp
  */
 
 #ifndef _RUMP_RUMP_SYSCALLS_H_
@@ -81,6 +81,10 @@
 #define RUMP_SYS_RENAME_LISTXATTR rump___sysimpl_listxattr
 #endif
 
+#ifndef RUMP_SYS_RENAME_PIPE2
+#define RUMP_SYS_RENAME_PIPE2 rump___sysimpl_pipe2
+#endif
+
 #ifndef RUMP_SYS_RENAME_EXTATTR_GET_FD
 #define RUMP_SYS_RENAME_EXTATTR_GET_FD rump___sysimpl_extattr_get_fd
 #endif
@@ -161,6 +165,10 @@
 #define RUMP_SYS_RENAME_EXTATTR_SET_LINK rump___sysimpl_extattr_set_link
 #endif
 
+#ifndef RUMP_SYS_RENAME_PACCEPT
+#define RUMP_SYS_RENAME_PACCEPT rump___sysimpl_paccept
+#endif
+
 #ifndef RUMP_SYS_RENAME_EXTATTR_LIST_FILE
 #define RUMP_SYS_RENAME_EXTATTR_LIST_FILE rump___sysimpl_extattr_list_file
 #endif
@@ -181,6 +189,10 @@
 #define RUMP_SYS_RENAME_DUP2 rump___sysimpl_dup2
 #endif
 
+#ifndef RUMP_SYS_RENAME_DUP3
+#define RUMP_SYS_RENAME_DUP3 rump___sysimpl_dup3
+#endif
+
 #ifndef RUMP_SYS_RENAME_FHOPEN
 #define RUMP_SYS_RENAME_FHOPEN rump___sysimpl_fhopen40
 #endif
@@ -245,6 +257,10 @@
 #define RUMP_SYS_RENAME_RMDIR rump___sysimpl_rmdir
 #endif
 
+#ifndef RUMP_SYS_RENAME_KQUEUE1
+#define RUMP_SYS_RENAME_KQUEUE1 rump___sysimpl_kqueue1
+#endif
+
 #ifndef RUMP_SYS_RENAME_GETGID_WITH_EGID
 #define RUMP_SYS_RENAME_GETGID_WITH_EGID rump___sysimpl_getgid
 #endif
@@ -655,10 +671,10 @@
 uid_t rump_sys_geteuid(void) __RENAME(RUMP_SYS_RENAME_GETEUID);
 ssize_t rump_sys_recvmsg(int, struct msghdr *, int) __RENAME(RUMP_SYS_RENAME_RECVMSG);
 ssize_t rump_sys_sendmsg(int, const struct msghdr *, int) __RENAME(RUMP_SYS_RENAME_SENDMSG);
-ssize_t rump_sys_recvfrom(int, void *, size_t, int, struct sockaddr *, unsigned int *) __RENAME(RUMP_SYS_RENAME_RECVFROM);
-int rump_sys_accept(int, struct sockaddr *, unsigned int *) __RENAME(RUMP_SYS_RENAME_ACCEPT);
-int rump_sys_getpeername(int, struct sockaddr *, unsigned int *) __RENAME(RUMP_SYS_RENAME_GETPEERNAME);
-int rump_sys_getsockname(int, struct sockaddr *, unsigned int *) __RENAME(RUMP_SYS_RENAME_GETSOCKNAME);
+ssize_t rump_sys_recvfrom(int, void *, size_t, int, struct sockaddr *, socklen_t *) __RENAME(RUMP_SYS_RENAME_RECVFROM);
+int rump_sys_accept(int, struct sockaddr *, socklen_t *) __RENAME(RUMP_SYS_RENAME_ACCEPT);
+int rump_sys_getpeername(int, struct sockaddr *, socklen_t *) __RENAME(RUMP_SYS_RENAME_GETPEERNAME);
+int rump_sys_getsockname(int, struct sockaddr *, socklen_t *) __RENAME(RUMP_SYS_RENAME_GETSOCKNAME);
 int rump_sys_access(const char *, int) __RENAME(RUMP_SYS_RENAME_ACCESS);
 int rump_sys_chflags(const char *, u_long) __RENAME(RUMP_SYS_RENAME_CHFLAGS);
 int rump_sys_fchflags(int, u_long) __RENAME(RUMP_SYS_RENAME_FCHFLAGS);
@@ -683,11 +699,11 @@
 int rump_sys_fcntl(int, int, ...) __RENAME(RUMP_SYS_RENAME_FCNTL);
 int rump_sys_select(int, fd_set *, fd_set *, fd_set *, struct timeval *) __RENAME(RUMP_SYS_RENAME_SELECT);
 int rump_sys_fsync(int) __RENAME(RUMP_SYS_RENAME_FSYNC);
-int rump_sys_connect(int, const struct sockaddr *, unsigned int) __RENAME(RUMP_SYS_RENAME_CONNECT);
-int rump_sys_bind(int, const struct sockaddr *, unsigned int) __RENAME(RUMP_SYS_RENAME_BIND);
-int rump_sys_setsockopt(int, int, int, const void *, unsigned int) __RENAME(RUMP_SYS_RENAME_SETSOCKOPT);
+int rump_sys_connect(int, const struct sockaddr *, socklen_t) __RENAME(RUMP_SYS_RENAME_CONNECT);
+int rump_sys_bind(int, const struct sockaddr *, socklen_t) __RENAME(RUMP_SYS_RENAME_BIND);
+int rump_sys_setsockopt(int, int, int, const void *, socklen_t) __RENAME(RUMP_SYS_RENAME_SETSOCKOPT);
 int rump_sys_listen(int, int) __RENAME(RUMP_SYS_RENAME_LISTEN);
-int rump_sys_getsockopt(int, int, int, void *, unsigned int *) __RENAME(RUMP_SYS_RENAME_GETSOCKOPT);
+int rump_sys_getsockopt(int, int, int, void *, socklen_t *) __RENAME(RUMP_SYS_RENAME_GETSOCKOPT);
 ssize_t rump_sys_readv(int, const struct iovec *, int) __RENAME(RUMP_SYS_RENAME_READV);
 ssize_t rump_sys_writev(int, const struct iovec *, int) __RENAME(RUMP_SYS_RENAME_WRITEV);
 int rump_sys_fchown(int, uid_t, gid_t) __RENAME(RUMP_SYS_RENAME_FCHOWN);
@@ -697,7 +713,7 @@
 int rump_sys_rename(const char *, const char *) __RENAME(RUMP_SYS_RENAME_RENAME);
 int rump_sys_flock(int, int) __RENAME(RUMP_SYS_RENAME_FLOCK);
 int rump_sys_mkfifo(const char *, mode_t) __RENAME(RUMP_SYS_RENAME_MKFIFO);
-ssize_t rump_sys_sendto(int, const void *, size_t, int, const struct sockaddr *, unsigned int) __RENAME(RUMP_SYS_RENAME_SENDTO);
+ssize_t rump_sys_sendto(int, const void *, size_t, int, const struct sockaddr *, socklen_t) __RENAME(RUMP_SYS_RENAME_SENDTO);
 int rump_sys_shutdown(int, int) __RENAME(RUMP_SYS_RENAME_SHUTDOWN);
 int rump_sys_socketpair(int, int, int, int *) __RENAME(RUMP_SYS_RENAME_SOCKETPAIR);
 int rump_sys_mkdir(const char *, mode_t) __RENAME(RUMP_SYS_RENAME_MKDIR);
@@ -788,6 +804,10 @@
 int rump_sys_mount(const char *, const char *, int, void *, size_t) __RENAME(RUMP_SYS_RENAME_MOUNT);
 int rump_sys_posix_fadvise(int, off_t, off_t, int) __RENAME(RUMP_SYS_RENAME_POSIX_FADVISE);
 int rump_sys_quotactl(const char *, struct plistref *) __RENAME(RUMP_SYS_RENAME_QUOTACTL);
+int rump_sys_pipe2(int *, int) __RENAME(RUMP_SYS_RENAME_PIPE2);
+int rump_sys_dup3(int, int, int) __RENAME(RUMP_SYS_RENAME_DUP3);
+int rump_sys_kqueue1(int) __RENAME(RUMP_SYS_RENAME_KQUEUE1);
+int rump_sys_paccept(int, struct sockaddr *, socklen_t *, const sigset_t *, int) __RENAME(RUMP_SYS_RENAME_PACCEPT);
 int rump_sys_pipe(int *);
 
 #endif /* _RUMP_RUMP_SYSCALLS_H_ */
Index: sys/rump/librump/rumpkern/rump_syscalls.c
===================================================================
RCS file: /cvsroot/src/sys/rump/librump/rumpkern/rump_syscalls.c,v
retrieving revision 1.71
diff -u -u -r1.71 rump_syscalls.c
--- sys/rump/librump/rumpkern/rump_syscalls.c	8 Mar 2011 18:31:11 -0000	1.71
+++ sys/rump/librump/rumpkern/rump_syscalls.c	25 Jun 2011 21:30:40 -0000
@@ -1,14 +1,14 @@
-/* $NetBSD: rump_syscalls.c,v 1.71 2011/03/08 18:31:11 pooka Exp $ */
+/* $NetBSD$ */
 
 /*
  * System call vector and marshalling for rump.
  *
  * DO NOT EDIT-- this file is automatically generated.
- * created from	NetBSD: syscalls.master,v 1.246 2011/03/06 17:08:36 bouyer Exp
+ * created from	NetBSD: syscalls.master,v 1.248 2011/03/09 22:12:45 pooka Exp
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rump_syscalls.c,v 1.71 2011/03/08 18:31:11 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD$");
 
 #include <sys/param.h>
 #include <sys/fstypes.h>
@@ -478,9 +478,9 @@
 }
 rsys_alias(sys_sendmsg,rump_enosys)
 
-ssize_t rump___sysimpl_recvfrom(int, void *, size_t, int, struct sockaddr *, unsigned int *);
+ssize_t rump___sysimpl_recvfrom(int, void *, size_t, int, struct sockaddr *, socklen_t *);
 ssize_t
-rump___sysimpl_recvfrom(int s, void * buf, size_t len, int flags, struct sockaddr * from, unsigned int * fromlenaddr)
+rump___sysimpl_recvfrom(int s, void * buf, size_t len, int flags, struct sockaddr * from, socklen_t * fromlenaddr)
 {
 	register_t retval[2] = {0, 0};
 	int error = 0;
@@ -506,9 +506,9 @@
 }
 rsys_alias(sys_recvfrom,rump_enosys)
 
-int rump___sysimpl_accept(int, struct sockaddr *, unsigned int *);
+int rump___sysimpl_accept(int, struct sockaddr *, socklen_t *);
 int
-rump___sysimpl_accept(int s, struct sockaddr * name, unsigned int * anamelen)
+rump___sysimpl_accept(int s, struct sockaddr * name, socklen_t * anamelen)
 {
 	register_t retval[2] = {0, 0};
 	int error = 0;
@@ -531,9 +531,9 @@
 }
 rsys_alias(sys_accept,rump_enosys)
 
-int rump___sysimpl_getpeername(int, struct sockaddr *, unsigned int *);
+int rump___sysimpl_getpeername(int, struct sockaddr *, socklen_t *);
 int
-rump___sysimpl_getpeername(int fdes, struct sockaddr * asa, unsigned int * alen)
+rump___sysimpl_getpeername(int fdes, struct sockaddr * asa, socklen_t * alen)
 {
 	register_t retval[2] = {0, 0};
 	int error = 0;
@@ -556,9 +556,9 @@
 }
 rsys_alias(sys_getpeername,rump_enosys)
 
-int rump___sysimpl_getsockname(int, struct sockaddr *, unsigned int *);
+int rump___sysimpl_getsockname(int, struct sockaddr *, socklen_t *);
 int
-rump___sysimpl_getsockname(int fdes, struct sockaddr * asa, unsigned int * alen)
+rump___sysimpl_getsockname(int fdes, struct sockaddr * asa, socklen_t * alen)
 {
 	register_t retval[2] = {0, 0};
 	int error = 0;
@@ -1115,9 +1115,9 @@
 }
 rsys_alias(sys_fsync,rump_enosys)
 
-int rump___sysimpl_connect(int, const struct sockaddr *, unsigned int);
+int rump___sysimpl_connect(int, const struct sockaddr *, socklen_t);
 int
-rump___sysimpl_connect(int s, const struct sockaddr * name, unsigned int namelen)
+rump___sysimpl_connect(int s, const struct sockaddr * name, socklen_t namelen)
 {
 	register_t retval[2] = {0, 0};
 	int error = 0;
@@ -1140,9 +1140,9 @@
 }
 rsys_alias(sys_connect,rump_enosys)
 
-int rump___sysimpl_bind(int, const struct sockaddr *, unsigned int);
+int rump___sysimpl_bind(int, const struct sockaddr *, socklen_t);
 int
-rump___sysimpl_bind(int s, const struct sockaddr * name, unsigned int namelen)
+rump___sysimpl_bind(int s, const struct sockaddr * name, socklen_t namelen)
 {
 	register_t retval[2] = {0, 0};
 	int error = 0;
@@ -1165,9 +1165,9 @@
 }
 rsys_alias(sys_bind,rump_enosys)
 
-int rump___sysimpl_setsockopt(int, int, int, const void *, unsigned int);
+int rump___sysimpl_setsockopt(int, int, int, const void *, socklen_t);
 int
-rump___sysimpl_setsockopt(int s, int level, int name, const void * val, unsigned int valsize)
+rump___sysimpl_setsockopt(int s, int level, int name, const void * val, socklen_t valsize)
 {
 	register_t retval[2] = {0, 0};
 	int error = 0;
@@ -1216,9 +1216,9 @@
 }
 rsys_alias(sys_listen,rump_enosys)
 
-int rump___sysimpl_getsockopt(int, int, int, void *, unsigned int *);
+int rump___sysimpl_getsockopt(int, int, int, void *, socklen_t *);
 int
-rump___sysimpl_getsockopt(int s, int level, int name, void * val, unsigned int * avalsize)
+rump___sysimpl_getsockopt(int s, int level, int name, void * val, socklen_t * avalsize)
 {
 	register_t retval[2] = {0, 0};
 	int error = 0;
@@ -1462,9 +1462,9 @@
 }
 rsys_alias(sys_mkfifo,rump_enosys)
 
-ssize_t rump___sysimpl_sendto(int, const void *, size_t, int, const struct sockaddr *, unsigned int);
+ssize_t rump___sysimpl_sendto(int, const void *, size_t, int, const struct sockaddr *, socklen_t);
 ssize_t
-rump___sysimpl_sendto(int s, const void * buf, size_t len, int flags, const struct sockaddr * to, unsigned int tolen)
+rump___sysimpl_sendto(int s, const void * buf, size_t len, int flags, const struct sockaddr * to, socklen_t tolen)
 {
 	register_t retval[2] = {0, 0};
 	int error = 0;
@@ -4022,6 +4022,105 @@
 }
 rsys_alias(sys___quotactl50,rump_enosys)
 
+int rump___sysimpl_pipe2(int *, int);
+int
+rump___sysimpl_pipe2(int * fildes, int flags)
+{
+	register_t retval[2] = {0, 0};
+	int error = 0;
+	int rv = -1;
+	struct sys_pipe2_args callarg;
+
+	SPARG(&callarg, fildes) = fildes;
+	SPARG(&callarg, flags) = flags;
+
+	error = rsys_syscall(SYS_pipe2, &callarg, sizeof(callarg), retval);
+	rsys_seterrno(error);
+	if (error == 0) {
+		if (sizeof(int) > sizeof(register_t))
+			rv = *(int *)retval;
+		else
+			rv = *retval;
+	}
+	return rv;
+}
+rsys_alias(sys_pipe2,rump_enosys)
+
+int rump___sysimpl_dup3(int, int, int);
+int
+rump___sysimpl_dup3(int from, int to, int flags)
+{
+	register_t retval[2] = {0, 0};
+	int error = 0;
+	int rv = -1;
+	struct sys_dup3_args callarg;
+
+	SPARG(&callarg, from) = from;
+	SPARG(&callarg, to) = to;
+	SPARG(&callarg, flags) = flags;
+
+	error = rsys_syscall(SYS_dup3, &callarg, sizeof(callarg), retval);
+	rsys_seterrno(error);
+	if (error == 0) {
+		if (sizeof(int) > sizeof(register_t))
+			rv = *(int *)retval;
+		else
+			rv = *retval;
+	}
+	return rv;
+}
+rsys_alias(sys_dup3,rump_enosys)
+
+int rump___sysimpl_kqueue1(int);
+int
+rump___sysimpl_kqueue1(int flags)
+{
+	register_t retval[2] = {0, 0};
+	int error = 0;
+	int rv = -1;
+	struct sys_kqueue1_args callarg;
+
+	SPARG(&callarg, flags) = flags;
+
+	error = rsys_syscall(SYS_kqueue1, &callarg, sizeof(callarg), retval);
+	rsys_seterrno(error);
+	if (error == 0) {
+		if (sizeof(int) > sizeof(register_t))
+			rv = *(int *)retval;
+		else
+			rv = *retval;
+	}
+	return rv;
+}
+rsys_alias(sys_kqueue1,rump_enosys)
+
+int rump___sysimpl_paccept(int, struct sockaddr *, socklen_t *, const sigset_t *, int);
+int
+rump___sysimpl_paccept(int s, struct sockaddr * name, socklen_t * anamelen, const sigset_t * mask, int flags)
+{
+	register_t retval[2] = {0, 0};
+	int error = 0;
+	int rv = -1;
+	struct sys_paccept_args callarg;
+
+	SPARG(&callarg, s) = s;
+	SPARG(&callarg, name) = name;
+	SPARG(&callarg, anamelen) = anamelen;
+	SPARG(&callarg, mask) = mask;
+	SPARG(&callarg, flags) = flags;
+
+	error = rsys_syscall(SYS_paccept, &callarg, sizeof(callarg), retval);
+	rsys_seterrno(error);
+	if (error == 0) {
+		if (sizeof(int) > sizeof(register_t))
+			rv = *(int *)retval;
+		else
+			rv = *retval;
+	}
+	return rv;
+}
+rsys_alias(sys_paccept,rump_enosys)
+
 int rump_sys_pipe(int *);
 int
 rump_sys_pipe(int *fd)
@@ -5039,14 +5138,14 @@
 	    (sy_call_t *)sys___fhstat50 },	/* 451 = __fhstat50 */
 	{ ns(struct sys___quotactl50_args), 0,
 	    (sy_call_t *)sys___quotactl50 },	/* 452 = __quotactl50 */
-	{ 0, 0, SYCALL_NOSYS,
-	    (sy_call_t *)rump_enosys },		/* 453 = filler */
-	{ 0, 0, SYCALL_NOSYS,
-	    (sy_call_t *)rump_enosys },		/* 454 = filler */
-	{ 0, 0, SYCALL_NOSYS,
-	    (sy_call_t *)rump_enosys },		/* 455 = filler */
-	{ 0, 0, SYCALL_NOSYS,
-	    (sy_call_t *)rump_enosys },		/* 456 = filler */
+	{ ns(struct sys_pipe2_args), 0,
+	    (sy_call_t *)sys_pipe2 },		/* 453 = pipe2 */
+	{ ns(struct sys_dup3_args), 0,
+	    (sy_call_t *)sys_dup3 },		/* 454 = dup3 */
+	{ ns(struct sys_kqueue1_args), 0,
+	    (sy_call_t *)sys_kqueue1 },		/* 455 = kqueue1 */
+	{ ns(struct sys_paccept_args), 0,
+	    (sy_call_t *)sys_paccept },		/* 456 = paccept */
 	{ 0, 0, SYCALL_NOSYS,
 	    (sy_call_t *)rump_enosys },		/* 457 = filler */
 	{ 0, 0, SYCALL_NOSYS,
Index: sys/sys/domain.h
===================================================================
RCS file: /cvsroot/src/sys/sys/domain.h,v
retrieving revision 1.30
diff -u -u -r1.30 domain.h
--- sys/sys/domain.h	31 Mar 2011 19:40:54 -0000	1.30
+++ sys/sys/domain.h	25 Jun 2011 21:30:41 -0000
@@ -58,7 +58,7 @@
 	void	(*dom_init)		/* initialize domain data structures */
 			(void);
 	int	(*dom_externalize)	/* externalize access rights */
-			(struct mbuf *, struct lwp *);
+			(struct mbuf *, struct lwp *, int);
 	void	(*dom_dispose)		/* dispose of internalized rights */
 			(struct mbuf *);
 	const struct protosw *dom_protosw, *dom_protoswNPROTOSW;
Index: sys/sys/event.h
===================================================================
RCS file: /cvsroot/src/sys/sys/event.h,v
retrieving revision 1.22
diff -u -u -r1.22 event.h
--- sys/sys/event.h	24 Apr 2011 18:46:24 -0000	1.22
+++ sys/sys/event.h	25 Jun 2011 21:30:41 -0000
@@ -246,6 +246,7 @@
 __BEGIN_DECLS
 #if defined(_NETBSD_SOURCE)
 int	kqueue(void);
+int	kqueue1(int);
 #ifndef __LIBC12_SOURCE__
 int	kevent(int, const struct kevent *, size_t, struct kevent *, size_t,
 		    const struct timespec *) __RENAME(__kevent50);
Index: sys/sys/fcntl.h
===================================================================
RCS file: /cvsroot/src/sys/sys/fcntl.h,v
retrieving revision 1.37
diff -u -u -r1.37 fcntl.h
--- sys/sys/fcntl.h	10 Apr 2011 15:45:33 -0000	1.37
+++ sys/sys/fcntl.h	25 Jun 2011 21:30:42 -0000
@@ -180,6 +180,7 @@
 #if defined(_NETBSD_SOURCE)
 #define	F_CLOSEM	10		/* close all fds >= to the one given */
 #define	F_MAXFD		11		/* return the max open fd */
+#define	F_DUPFD_CLOEXEC	12		/* close on exec duplicated fd */
 #endif
 
 /* file descriptor flags (F_GETFD, F_SETFD) */
Index: sys/sys/filedesc.h
===================================================================
RCS file: /cvsroot/src/sys/sys/filedesc.h,v
retrieving revision 1.60
diff -u -u -r1.60 filedesc.h
--- sys/sys/filedesc.h	1 Jun 2011 21:25:02 -0000	1.60
+++ sys/sys/filedesc.h	25 Jun 2011 21:30:42 -0000
@@ -204,7 +204,7 @@
 void	fd_putsock(unsigned);
 int	fd_close(unsigned);
 int	fd_dup(file_t *, int, int *, bool);
-int	fd_dup2(file_t *, unsigned);
+int	fd_dup2(file_t *, unsigned, int);
 int	fd_clone(file_t *, unsigned, int, const struct fileops *, void *);
 void	fd_set_exclose(struct lwp *, int, bool);
 int	pipe1(struct lwp *, register_t *, int);
Index: sys/sys/socket.h
===================================================================
RCS file: /cvsroot/src/sys/sys/socket.h,v
retrieving revision 1.99
diff -u -u -r1.99 socket.h
--- sys/sys/socket.h	1 Feb 2011 01:39:21 -0000	1.99
+++ sys/sys/socket.h	25 Jun 2011 21:30:42 -0000
@@ -97,6 +97,7 @@
 #endif
 
 #include <sys/uio.h>
+#include <sys/sigtypes.h>
 
 /*
  * Socket types.
@@ -107,6 +108,10 @@
 #define	SOCK_RDM	4		/* reliably-delivered message */
 #define	SOCK_SEQPACKET	5		/* sequenced packet stream */
 
+#define	SOCK_CLOEXEC	0x10000000	/* set close on exec on socket */
+#define	SOCK_NONBLOCK	0x20000000	/* set non blocking i/o socket */
+#define	SOCK_FLAGS_MASK	0xf0000000	/* flags mask */
+
 /*
  * Option flags per-socket.
  */
@@ -485,6 +490,9 @@
 #define	MSG_BCAST	0x0100		/* this message was rcvd using link-level brdcst */
 #define	MSG_MCAST	0x0200		/* this message was rcvd using link-level mcast */
 #define	MSG_NOSIGNAL	0x0400		/* do not generate SIGPIPE on EOF */
+#if defined(_NETBSD_SOURCE)
+#define	MSG_CMSG_CLOEXEC 0x0800		/* close on exec receiving fd */
+#endif
 
 /* Extra flags used internally only */
 #define	MSG_USERFLAGS	0x0ffffff
@@ -603,6 +611,8 @@
 int	getsockname(int, struct sockaddr * __restrict, socklen_t * __restrict);
 int	getsockopt(int, int, int, void *__restrict, socklen_t * __restrict);
 int	listen(int, int);
+int	paccept(int, struct sockaddr * __restrict, socklen_t * __restrict,
+	const sigset_t * __restrict, int);
 ssize_t	recv(int, void *, size_t, int);
 ssize_t	recvfrom(int, void *__restrict, size_t, int,
 	    struct sockaddr * __restrict, socklen_t * __restrict);
Index: sys/sys/socketvar.h
===================================================================
RCS file: /cvsroot/src/sys/sys/socketvar.h,v
retrieving revision 1.124
diff -u -u -r1.124 socketvar.h
--- sys/sys/socketvar.h	29 Dec 2009 04:23:43 -0000	1.124
+++ sys/sys/socketvar.h	25 Jun 2011 21:30:43 -0000
@@ -350,7 +350,8 @@
 
 int	do_sys_bind(struct lwp *, int, struct mbuf *);
 int	do_sys_connect(struct lwp *, int, struct mbuf *);
-int	do_sys_accept(struct lwp *, int, struct mbuf **, register_t *);
+int	do_sys_accept(struct lwp *, int, struct mbuf **, register_t *,
+	    const sigset_t *, int, int);
 
 /*
  * Inline functions for sockets and socket buffering.
Index: sys/sys/syscall.h
===================================================================
RCS file: /cvsroot/src/sys/sys/syscall.h,v
retrieving revision 1.241
diff -u -u -r1.241 syscall.h
--- sys/sys/syscall.h	6 Mar 2011 17:08:38 -0000	1.241
+++ sys/sys/syscall.h	25 Jun 2011 21:30:43 -0000
@@ -1,10 +1,10 @@
-/* $NetBSD: syscall.h,v 1.241 2011/03/06 17:08:38 bouyer Exp $ */
+/* $NetBSD$ */
 
 /*
  * System call numbers.
  *
  * DO NOT EDIT-- this file is automatically generated.
- * created from	NetBSD
+ * created from	NetBSD: syscalls.master,v 1.248 2011/03/09 22:12:45 pooka Exp
  */
 
 #ifndef _SYS_SYSCALL_H_
@@ -97,16 +97,16 @@
 /* syscall: "sendmsg" ret: "ssize_t" args: "int" "const struct msghdr *" "int" */
 #define	SYS_sendmsg	28
 
-/* syscall: "recvfrom" ret: "ssize_t" args: "int" "void *" "size_t" "int" "struct sockaddr *" "unsigned int *" */
+/* syscall: "recvfrom" ret: "ssize_t" args: "int" "void *" "size_t" "int" "struct sockaddr *" "socklen_t *" */
 #define	SYS_recvfrom	29
 
-/* syscall: "accept" ret: "int" args: "int" "struct sockaddr *" "unsigned int *" */
+/* syscall: "accept" ret: "int" args: "int" "struct sockaddr *" "socklen_t *" */
 #define	SYS_accept	30
 
-/* syscall: "getpeername" ret: "int" args: "int" "struct sockaddr *" "unsigned int *" */
+/* syscall: "getpeername" ret: "int" args: "int" "struct sockaddr *" "socklen_t *" */
 #define	SYS_getpeername	31
 
-/* syscall: "getsockname" ret: "int" args: "int" "struct sockaddr *" "unsigned int *" */
+/* syscall: "getsockname" ret: "int" args: "int" "struct sockaddr *" "socklen_t *" */
 #define	SYS_getsockname	32
 
 /* syscall: "access" ret: "int" args: "const char *" "int" */
@@ -290,10 +290,10 @@
 /* syscall: "compat_30_socket" ret: "int" args: "int" "int" "int" */
 #define	SYS_compat_30_socket	97
 
-/* syscall: "connect" ret: "int" args: "int" "const struct sockaddr *" "unsigned int" */
+/* syscall: "connect" ret: "int" args: "int" "const struct sockaddr *" "socklen_t" */
 #define	SYS_connect	98
 
-/* syscall: "compat_43_oaccept" ret: "int" args: "int" "void *" "int *" */
+/* syscall: "compat_43_oaccept" ret: "int" args: "int" "void *" "socklen_t *" */
 #define	SYS_compat_43_oaccept	99
 
 /* syscall: "getpriority" ret: "int" args: "int" "id_t" */
@@ -308,10 +308,10 @@
 /* syscall: "compat_13_sigreturn13" ret: "int" args: "struct sigcontext13 *" */
 #define	SYS_compat_13_sigreturn13	103
 
-/* syscall: "bind" ret: "int" args: "int" "const struct sockaddr *" "unsigned int" */
+/* syscall: "bind" ret: "int" args: "int" "const struct sockaddr *" "socklen_t" */
 #define	SYS_bind	104
 
-/* syscall: "setsockopt" ret: "int" args: "int" "int" "int" "const void *" "unsigned int" */
+/* syscall: "setsockopt" ret: "int" args: "int" "int" "int" "const void *" "socklen_t" */
 #define	SYS_setsockopt	105
 
 /* syscall: "listen" ret: "int" args: "int" "int" */
@@ -346,7 +346,7 @@
 /* syscall: "compat_50_getrusage" ret: "int" args: "int" "struct rusage50 *" */
 #define	SYS_compat_50_getrusage	117
 
-/* syscall: "getsockopt" ret: "int" args: "int" "int" "int" "void *" "unsigned int *" */
+/* syscall: "getsockopt" ret: "int" args: "int" "int" "int" "void *" "socklen_t *" */
 #define	SYS_getsockopt	118
 
 				/* 119 is obsolete resuba */
@@ -365,7 +365,7 @@
 /* syscall: "fchmod" ret: "int" args: "int" "mode_t" */
 #define	SYS_fchmod	124
 
-/* syscall: "compat_43_orecvfrom" ret: "int" args: "int" "void *" "size_t" "int" "void *" "int *" */
+/* syscall: "compat_43_orecvfrom" ret: "int" args: "int" "void *" "size_t" "int" "void *" "socklen_t *" */
 #define	SYS_compat_43_orecvfrom	125
 
 /* syscall: "setreuid" ret: "int" args: "uid_t" "uid_t" */
@@ -389,7 +389,7 @@
 /* syscall: "mkfifo" ret: "int" args: "const char *" "mode_t" */
 #define	SYS_mkfifo	132
 
-/* syscall: "sendto" ret: "ssize_t" args: "int" "const void *" "size_t" "int" "const struct sockaddr *" "unsigned int" */
+/* syscall: "sendto" ret: "ssize_t" args: "int" "const void *" "size_t" "int" "const struct sockaddr *" "socklen_t" */
 #define	SYS_sendto	133
 
 /* syscall: "shutdown" ret: "int" args: "int" "int" */
@@ -411,7 +411,7 @@
 /* syscall: "compat_50_adjtime" ret: "int" args: "const struct timeval50 *" "struct timeval50 *" */
 #define	SYS_compat_50_adjtime	140
 
-/* syscall: "compat_43_ogetpeername" ret: "int" args: "int" "void *" "int *" */
+/* syscall: "compat_43_ogetpeername" ret: "int" args: "int" "void *" "socklen_t *" */
 #define	SYS_compat_43_ogetpeername	141
 
 /* syscall: "compat_43_ogethostid" ret: "int32_t" args: */
@@ -438,7 +438,7 @@
 /* syscall: "compat_43_oquota" ret: "int" args: */
 #define	SYS_compat_43_oquota	149
 
-/* syscall: "compat_43_ogetsockname" ret: "int" args: "int" "void *" "int *" */
+/* syscall: "compat_43_ogetsockname" ret: "int" args: "int" "void *" "socklen_t *" */
 #define	SYS_compat_43_ogetsockname	150
 
 /* syscall: "nfssvc" ret: "int" args: "int" "void *" */
@@ -1282,6 +1282,18 @@
 /* syscall: "__quotactl50" ret: "int" args: "const char *" "struct plistref *" */
 #define	SYS___quotactl50	452
 
-#define	SYS_MAXSYSCALL	453
+/* syscall: "pipe2" ret: "int" args: "int *" "int" */
+#define	SYS_pipe2	453
+
+/* syscall: "dup3" ret: "int" args: "int" "int" "int" */
+#define	SYS_dup3	454
+
+/* syscall: "kqueue1" ret: "int" args: "int" */
+#define	SYS_kqueue1	455
+
+/* syscall: "paccept" ret: "int" args: "int" "struct sockaddr *" "socklen_t *" "const sigset_t *" "int" */
+#define	SYS_paccept	456
+
+#define	SYS_MAXSYSCALL	457
 #define	SYS_NSYSENT	512
 #endif /* _SYS_SYSCALL_H_ */
Index: sys/sys/syscallargs.h
===================================================================
RCS file: /cvsroot/src/sys/sys/syscallargs.h,v
retrieving revision 1.224
diff -u -u -r1.224 syscallargs.h
--- sys/sys/syscallargs.h	6 Mar 2011 17:08:38 -0000	1.224
+++ sys/sys/syscallargs.h	25 Jun 2011 21:30:45 -0000
@@ -1,10 +1,10 @@
-/* $NetBSD: syscallargs.h,v 1.224 2011/03/06 17:08:38 bouyer Exp $ */
+/* $NetBSD$ */
 
 /*
  * System call argument lists.
  *
  * DO NOT EDIT-- this file is automatically generated.
- * created from	NetBSD
+ * created from	NetBSD: syscalls.master,v 1.248 2011/03/09 22:12:45 pooka Exp
  */
 
 #ifndef _SYS_SYSCALLARGS_H_
@@ -12,6 +12,7 @@
 
 #include <sys/mount.h>
 #include <sys/sched.h>
+#include <sys/socket.h>
 
 #define	SYS_MAXSYSARGS	8
 
@@ -191,28 +192,28 @@
 	syscallarg(size_t) len;
 	syscallarg(int) flags;
 	syscallarg(struct sockaddr *) from;
-	syscallarg(unsigned int *) fromlenaddr;
+	syscallarg(socklen_t *) fromlenaddr;
 };
 check_syscall_args(sys_recvfrom)
 
 struct sys_accept_args {
 	syscallarg(int) s;
 	syscallarg(struct sockaddr *) name;
-	syscallarg(unsigned int *) anamelen;
+	syscallarg(socklen_t *) anamelen;
 };
 check_syscall_args(sys_accept)
 
 struct sys_getpeername_args {
 	syscallarg(int) fdes;
 	syscallarg(struct sockaddr *) asa;
-	syscallarg(unsigned int *) alen;
+	syscallarg(socklen_t *) alen;
 };
 check_syscall_args(sys_getpeername)
 
 struct sys_getsockname_args {
 	syscallarg(int) fdes;
 	syscallarg(struct sockaddr *) asa;
-	syscallarg(unsigned int *) alen;
+	syscallarg(socklen_t *) alen;
 };
 check_syscall_args(sys_getsockname)
 
@@ -519,14 +520,14 @@
 struct sys_connect_args {
 	syscallarg(int) s;
 	syscallarg(const struct sockaddr *) name;
-	syscallarg(unsigned int) namelen;
+	syscallarg(socklen_t) namelen;
 };
 check_syscall_args(sys_connect)
 
 struct compat_43_sys_accept_args {
 	syscallarg(int) s;
 	syscallarg(void *) name;
-	syscallarg(int *) anamelen;
+	syscallarg(socklen_t *) anamelen;
 };
 check_syscall_args(compat_43_sys_accept)
 
@@ -560,7 +561,7 @@
 struct sys_bind_args {
 	syscallarg(int) s;
 	syscallarg(const struct sockaddr *) name;
-	syscallarg(unsigned int) namelen;
+	syscallarg(socklen_t) namelen;
 };
 check_syscall_args(sys_bind)
 
@@ -569,7 +570,7 @@
 	syscallarg(int) level;
 	syscallarg(int) name;
 	syscallarg(const void *) val;
-	syscallarg(unsigned int) valsize;
+	syscallarg(socklen_t) valsize;
 };
 check_syscall_args(sys_setsockopt)
 
@@ -638,7 +639,7 @@
 	syscallarg(int) level;
 	syscallarg(int) name;
 	syscallarg(void *) val;
-	syscallarg(unsigned int *) avalsize;
+	syscallarg(socklen_t *) avalsize;
 };
 check_syscall_args(sys_getsockopt)
 
@@ -681,7 +682,7 @@
 	syscallarg(size_t) len;
 	syscallarg(int) flags;
 	syscallarg(void *) from;
-	syscallarg(int *) fromlenaddr;
+	syscallarg(socklen_t *) fromlenaddr;
 };
 check_syscall_args(compat_43_sys_recvfrom)
 
@@ -733,7 +734,7 @@
 	syscallarg(size_t) len;
 	syscallarg(int) flags;
 	syscallarg(const struct sockaddr *) to;
-	syscallarg(unsigned int) tolen;
+	syscallarg(socklen_t) tolen;
 };
 check_syscall_args(sys_sendto)
 
@@ -777,7 +778,7 @@
 struct compat_43_sys_getpeername_args {
 	syscallarg(int) fdes;
 	syscallarg(void *) asa;
-	syscallarg(int *) alen;
+	syscallarg(socklen_t *) alen;
 };
 check_syscall_args(compat_43_sys_getpeername)
 
@@ -815,7 +816,7 @@
 struct compat_43_sys_getsockname_args {
 	syscallarg(int) fdec;
 	syscallarg(void *) asa;
-	syscallarg(int *) alen;
+	syscallarg(socklen_t *) alen;
 };
 check_syscall_args(compat_43_sys_getsockname)
 
@@ -2537,6 +2538,33 @@
 };
 check_syscall_args(sys___quotactl50)
 
+struct sys_pipe2_args {
+	syscallarg(int *) fildes;
+	syscallarg(int) flags;
+};
+check_syscall_args(sys_pipe2)
+
+struct sys_dup3_args {
+	syscallarg(int) from;
+	syscallarg(int) to;
+	syscallarg(int) flags;
+};
+check_syscall_args(sys_dup3)
+
+struct sys_kqueue1_args {
+	syscallarg(int) flags;
+};
+check_syscall_args(sys_kqueue1)
+
+struct sys_paccept_args {
+	syscallarg(int) s;
+	syscallarg(struct sockaddr *) name;
+	syscallarg(socklen_t *) anamelen;
+	syscallarg(const sigset_t *) mask;
+	syscallarg(int) flags;
+};
+check_syscall_args(sys_paccept)
+
 /*
  * System call prototypes.
  */
@@ -3379,4 +3407,12 @@
 
 int	sys___quotactl50(struct lwp *, const struct sys___quotactl50_args *, register_t *);
 
+int	sys_pipe2(struct lwp *, const struct sys_pipe2_args *, register_t *);
+
+int	sys_dup3(struct lwp *, const struct sys_dup3_args *, register_t *);
+
+int	sys_kqueue1(struct lwp *, const struct sys_kqueue1_args *, register_t *);
+
+int	sys_paccept(struct lwp *, const struct sys_paccept_args *, register_t *);
+
 #endif /* _SYS_SYSCALLARGS_H_ */
Index: sys/sys/un.h
===================================================================
RCS file: /cvsroot/src/sys/sys/un.h,v
retrieving revision 1.45
diff -u -u -r1.45 un.h
--- sys/sys/un.h	11 Mar 2009 06:05:30 -0000	1.45
+++ sys/sys/un.h	25 Jun 2011 21:30:45 -0000
@@ -92,7 +92,7 @@
 void	unp_disconnect (struct unpcb *);
 bool	unp_drop (struct unpcb *, int);
 void	unp_shutdown (struct unpcb *);
-int 	unp_externalize (struct mbuf *, struct lwp *);
+int 	unp_externalize (struct mbuf *, struct lwp *, int);
 int	unp_internalize (struct mbuf **);
 void 	unp_dispose (struct mbuf *);
 int	unp_output (struct mbuf *, struct mbuf *, struct unpcb *,