From: Jarkko Hietaniemi <jhi@iki.fi>
Date: Thu, 5 Apr 2001 17:47:01 +0000 (+0000)
Subject: Introduce d_u32align / U32_REQUIRES_ALIGNMENT, needed for
X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=4e0554ec1a41c5b5d840b8e29e149a0efe77a52c;p=p5sagit%2Fp5-mst-13.2.git

Introduce d_u32align / U32_REQUIRES_ALIGNMENT, needed for
ext/Digest/MD5/Makefile.PL and t/lib/md5-align.t.
Introduce probes for struct msghdr, struct cmsghdr,
sendmsg, recvmsg, readv, writev, setitimer, getitimer,
ualarm, usleep, for possible later extension work.

p4raw-id: //depot/perl@9560
---

diff --git a/Configure b/Configure
index e170872..d2fe5bb 100755
--- a/Configure
+++ b/Configure
@@ -20,7 +20,7 @@
 
 # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
 #
-# Generated on Tue Apr  3 04:12:27 EET DST 2001 [metaconfig 3.0 PL70]
+# Generated on Thu Apr  5 20:11:33 EET DST 2001 [metaconfig 3.0 PL70]
 # (with additional metaconfig patches by perlbug@perl.org)
 
 cat >c1$$ <<EOF
@@ -324,6 +324,7 @@ d_chroot=''
 d_chsize=''
 d_closedir=''
 d_void_closedir=''
+d_cmsghdr_s=''
 d_const=''
 cryptlib=''
 d_crypt=''
@@ -381,6 +382,7 @@ d_gethname=''
 d_phostname=''
 d_uname=''
 d_gethostprotos=''
+d_getitimer=''
 d_getlogin=''
 d_getmnt=''
 d_getmntent=''
@@ -449,6 +451,7 @@ d_mprotect=''
 d_msg=''
 d_msgctl=''
 d_msgget=''
+d_msghdr_s=''
 d_msgrcv=''
 d_msgsnd=''
 d_msync=''
@@ -473,6 +476,8 @@ d_rewinddir=''
 d_seekdir=''
 d_telldir=''
 d_readlink=''
+d_readv=''
+d_recvmsg=''
 d_rename=''
 d_rmdir=''
 d_safebcpy=''
@@ -484,11 +489,13 @@ d_sem=''
 d_semctl=''
 d_semget=''
 d_semop=''
+d_sendmsg=''
 d_setegid=''
 d_seteuid=''
 d_setgrent=''
 d_setgrps=''
 d_sethent=''
+d_setitimer=''
 d_setlinebuf=''
 d_setlocale=''
 d_setnent=''
@@ -582,10 +589,13 @@ clocktype=''
 d_times=''
 d_truncate=''
 d_tzname=''
+d_u32align=''
+d_ualarm=''
 d_umask=''
 d_semctl_semid_ds=''
 d_semctl_semun=''
 d_union_semun=''
+d_usleep=''
 d_ustat=''
 d_vfork=''
 usevfork=''
@@ -598,6 +608,7 @@ d_wait4=''
 d_waitpid=''
 d_wcstombs=''
 d_wctomb=''
+d_writev=''
 dlext=''
 cccdlflags=''
 ccdlflags=''
@@ -8712,6 +8723,144 @@ eval $inlibc
 set chsize d_chsize
 eval $inlibc
 
+hasstruct='varname=$1; struct=$2; shift; shift;
+while $test $# -ge 2; do
+	case "$1" in
+	$define) echo "#include <$2>";;
+	esac ;
+    shift 2;
+done > try.c;
+echo "int main () { struct $struct foo; }" >> try.c;
+set try;
+if eval $compile; then
+	val="$define";
+else
+	val="$undef";
+fi;
+set $varname;
+eval $setvar;
+$rm -f try.c try.o'
+
+: see if sys/types.h has to be included
+set sys/types.h i_systypes
+eval $inhdr
+
+hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
+while $test $# -ge 2; do
+	case "$1" in
+	$define) echo "#include <$2>";;
+	esac ;
+    shift 2;
+done > try.c;
+echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
+set try;
+if eval $compile; then
+	val="$define";
+else
+	val="$undef";
+fi;
+set $varname;
+eval $setvar;
+$rm -f try.c try.o'
+
+socketlib=''
+sockethdr=''
+: see whether socket exists
+echo " "
+$echo $n "Hmm... $c" >&4
+if set socket val -f d_socket; eval $csym; $val; then
+	echo "Looks like you have Berkeley networking support." >&4
+	d_socket="$define"
+	if set setsockopt val -f; eval $csym; $val; then
+		d_oldsock="$undef"
+	else
+		echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
+		d_oldsock="$define"
+	fi
+else
+	if $contains socklib libc.list >/dev/null 2>&1; then
+		echo "Looks like you have Berkeley networking support." >&4
+		d_socket="$define"
+		: we will have to assume that it supports the 4.2 BSD interface
+		d_oldsock="$undef"
+	else
+		echo "You don't have Berkeley networking in libc$_a..." >&4
+		if test "X$d_socket" = "X$define"; then
+		   echo "...but you seem to believe that you have sockets." >&4
+		else
+			for net in net socket
+			do
+				if test -f /usr/lib/lib$net$_a; then
+					( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
+					$ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
+					if $contains socket libc.list >/dev/null 2>&1; then
+						d_socket="$define"
+						socketlib="-l$net"
+						case "$net" in
+						net)
+							echo "...but the Wollongong group seems to have hacked it in." >&4
+							sockethdr="-I/usr/netinclude"
+							;;
+						esac
+						echo "Found Berkeley sockets interface in lib$net." >& 4 
+						if $contains setsockopt libc.list >/dev/null 2>&1; then
+							d_oldsock="$undef"
+						else
+							echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
+							d_oldsock="$define"
+						fi
+						break
+					fi
+				fi
+			done
+			if test "X$d_socket" != "X$define"; then
+			   echo "or anywhere else I see." >&4
+			   d_socket="$undef"
+			   d_oldsock="$undef"
+			fi
+		fi
+	fi
+fi
+
+: see if socketpair exists
+set socketpair d_sockpair
+eval $inlibc
+
+
+echo " "
+echo "Checking the availability of certain socket constants..." >& 4
+for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
+	enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
+	$cat >try.c <<EOF
+#include <sys/types.h>
+#include <sys/socket.h>
+int main() {
+    int i = $ENUM;
+}
+EOF
+	val="$undef"
+	set try; if eval $compile; then
+		val="$define"
+	fi
+	set d_${enum}; eval $setvar
+	$rm -f try.c try
+done
+
+: see if this is a sys/uio.h system
+set sys/uio.h i_sysuio
+eval $inhdr
+
+
+echo " "
+echo "Checking to see if your system supports struct cmsghdr..." >&4
+set d_cmsghdr_s cmsghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
+eval $hasstruct
+case "$d_cmsghdr_s" in
+"$define")      echo "Yes, it does."   ;;
+*)              echo "No, it doesn't." ;;
+esac
+
+
 : check for const keyword
 echo " "
 echo 'Checking to see if your C compiler knows about "const"...' >&4
@@ -9388,107 +9537,6 @@ eval $setvar
 $rm -f try*
 
 
-hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
-while $test $# -ge 2; do
-	case "$1" in
-	$define) echo "#include <$2>";;
-	esac ;
-    shift 2;
-done > try.c;
-echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
-set try;
-if eval $compile; then
-	val="$define";
-else
-	val="$undef";
-fi;
-set $varname;
-eval $setvar;
-$rm -f try.c try.o'
-
-socketlib=''
-sockethdr=''
-: see whether socket exists
-echo " "
-$echo $n "Hmm... $c" >&4
-if set socket val -f d_socket; eval $csym; $val; then
-	echo "Looks like you have Berkeley networking support." >&4
-	d_socket="$define"
-	if set setsockopt val -f; eval $csym; $val; then
-		d_oldsock="$undef"
-	else
-		echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
-		d_oldsock="$define"
-	fi
-else
-	if $contains socklib libc.list >/dev/null 2>&1; then
-		echo "Looks like you have Berkeley networking support." >&4
-		d_socket="$define"
-		: we will have to assume that it supports the 4.2 BSD interface
-		d_oldsock="$undef"
-	else
-		echo "You don't have Berkeley networking in libc$_a..." >&4
-		if test "X$d_socket" = "X$define"; then
-		   echo "...but you seem to believe that you have sockets." >&4
-		else
-			for net in net socket
-			do
-				if test -f /usr/lib/lib$net$_a; then
-					( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
-					$ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
-					if $contains socket libc.list >/dev/null 2>&1; then
-						d_socket="$define"
-						socketlib="-l$net"
-						case "$net" in
-						net)
-							echo "...but the Wollongong group seems to have hacked it in." >&4
-							sockethdr="-I/usr/netinclude"
-							;;
-						esac
-						echo "Found Berkeley sockets interface in lib$net." >& 4 
-						if $contains setsockopt libc.list >/dev/null 2>&1; then
-							d_oldsock="$undef"
-						else
-							echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
-							d_oldsock="$define"
-						fi
-						break
-					fi
-				fi
-			done
-			if test "X$d_socket" != "X$define"; then
-			   echo "or anywhere else I see." >&4
-			   d_socket="$undef"
-			   d_oldsock="$undef"
-			fi
-		fi
-	fi
-fi
-
-: see if socketpair exists
-set socketpair d_sockpair
-eval $inlibc
-
-
-echo " "
-echo "Checking the availability of certain socket constants..." >& 4
-for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
-	enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
-	$cat >try.c <<EOF
-#include <sys/types.h>
-#include <sys/socket.h>
-int main() {
-    int i = $ENUM;
-}
-EOF
-	val="$undef"
-	set try; if eval $compile; then
-		val="$define"
-	fi
-	set d_${enum}; eval $setvar
-	$rm -f try.c try
-done
-
 : see if sys/select.h has to be included
 set sys/select.h i_sysselct
 eval $inhdr
@@ -9698,24 +9746,6 @@ eval $setvar
 set frexpl d_frexpl
 eval $inlibc
 
-hasstruct='varname=$1; struct=$2; shift; shift;
-while $test $# -ge 2; do
-	case "$1" in
-	$define) echo "#include <$2>";;
-	esac ;
-    shift 2;
-done > try.c;
-echo "int main () { struct $struct foo; }" >> try.c;
-set try;
-if eval $compile; then
-	val="$define";
-else
-	val="$undef";
-fi;
-set $varname;
-eval $setvar;
-$rm -f try.c try.o'
-
 : see if this is a sys/param system
 set sys/param.h i_sysparam
 eval $inhdr
@@ -9724,10 +9754,6 @@ eval $inhdr
 set sys/mount.h i_sysmount
 eval $inhdr
 
-: see if sys/types.h has to be included
-set sys/types.h i_systypes
-eval $inhdr
-
 
 echo " "
 echo "Checking to see if your system supports struct fs_data..." >&4
@@ -9898,6 +9924,10 @@ echo " "
 set d_gethostprotos gethostent $i_netdb netdb.h
 eval $hasproto
 
+: see if getitimer exists
+set getitimer d_getitimer
+eval $inlibc
+
 : see if getlogin exists
 set getlogin d_getlogin
 eval $inlibc
@@ -10394,6 +10424,17 @@ fi
 set d_msg
 eval $setvar
 
+
+echo " "
+echo "Checking to see if your system supports struct msghdr..." >&4
+set d_msghdr_s msghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
+eval $hasstruct
+case "$d_msghdr_s" in
+"$define")      echo "Yes, it does."   ;;
+*)              echo "No, it doesn't." ;;
+esac
+
+
 : see if msync exists
 set msync d_msync
 eval $inlibc
@@ -10980,6 +11021,14 @@ eval $inlibc
 set readlink d_readlink
 eval $inlibc
 
+: see if readv exists
+set readv d_readv
+eval $inlibc
+
+: see if recvmsg exists
+set recvmsg d_recvmsg
+eval $inlibc
+
 : see if rename exists
 set rename d_rename
 eval $inlibc
@@ -11462,6 +11511,10 @@ END
     ;;
 esac
 
+: see if sendmsg exists
+set sendmsg d_sendmsg
+eval $inlibc
+
 : see if setegid exists
 set setegid d_setegid
 eval $inlibc
@@ -11478,6 +11531,10 @@ eval $inlibc
 set sethostent d_sethent
 eval $inlibc
 
+: see if setitimer exists
+set setitimer d_setitimer
+eval $inlibc
+
 : see if setlinebuf exists
 set setlinebuf d_setlinebuf
 eval $inlibc
@@ -12501,10 +12558,185 @@ fi
 set d_tzname
 eval $setvar
 
+case "$crosscompile" in
+''|[nN]*) crosscompile="$undef" ;;
+esac
+
+case "$osname" in
+next|rhapsody|darwin) multiarch="$define" ;;
+esac
+case "$multiarch" in
+''|[nN]*) multiarch="$undef" ;;
+esac
+
+: check for ordering of bytes in a long
+echo " "
+case "$crosscompile$multiarch" in
+*$define*)
+	$cat <<EOM
+You seem to be either cross-compiling or doing a multiarchitecture build,
+skipping the byteorder check.
+
+EOM
+	byteorder='0xffff'
+	;;
+*)
+	case "$byteorder" in
+	'')
+		$cat <<'EOM'
+In the following, larger digits indicate more significance.  A big-endian
+machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
+little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
+machines may have weird orders like 3412.  A Cray will report 87654321,
+an Alpha will report 12345678. If the test program works the default is
+probably right.
+I'm now running the test program...
+EOM
+		$cat >try.c <<'EOCP'
+#include <stdio.h>
+int main()
+{
+	int i;
+	union {
+		unsigned long l;
+		char c[sizeof(long)];
+	} u;
+
+	if (sizeof(long) > 4)
+		u.l = (0x08070605L << 32) | 0x04030201L;
+	else
+		u.l = 0x04030201L;
+	for (i = 0; i < sizeof(long); i++)
+		printf("%c", u.c[i]+'0');
+	printf("\n");
+	exit(0);
+}
+EOCP
+		xxx_prompt=y
+		set try
+		if eval $compile && ./try > /dev/null; then
+			dflt=`./try`
+			case "$dflt" in
+			[1-4][1-4][1-4][1-4]|12345678|87654321)
+				echo "(The test program ran ok.)"
+				echo "byteorder=$dflt"
+				xxx_prompt=n
+			;;
+			????|????????) echo "(The test program ran ok.)" ;;
+			*) echo "(The test program didn't run right for some reason.)" ;;
+			esac
+		else
+			dflt='4321'
+			cat <<'EOM'
+(I can't seem to compile the test program.  Guessing big-endian...)
+EOM
+		fi
+		case "$xxx_prompt" in
+		y)
+			rp="What is the order of bytes in a long?"
+			. ./myread
+			byteorder="$ans"
+			;;
+		*)	byteorder=$dflt
+			;;
+		esac
+		;;
+	esac
+	$rm -f try.c try
+	;;
+esac
+
+
+$cat <<EOM
+
+Checking to see whether you can access character data unalignedly...
+EOM
+$cat >try.c <<EOCP
+#include <stdio.h>
+#define U32 $u32type
+#define BYTEORDER $byteorder
+int main() {
+#if BYTEORDER == 0x1234 || BYTEORDER == 0x4321
+    U8 buf[] = "\0\0\0\1\0\0\0\0";
+    U32 *up;
+    int i;
+
+    if (sizeof(U32) != 4) {
+	printf("sizeof(U32) is not 4, but %d\n", sizeof(U32));
+	exit(1);
+    }
+
+    fflush(stdout);
+
+    for (i = 0; i < 4; i++) {
+	up = (U32*)(buf + i);
+	if (! ((*up == 1 << (8*i)) ||   /* big-endian */
+	       (*up == 1 << (8*(3-i)))  /* little-endian */
+	      )
+	   )
+	{
+	    printf("read failed (%x)\n", *up);
+	    exit(2);
+	}
+    }
+
+    /* write test */
+    for (i = 0; i < 4; i++) {
+	up = (U32*)(buf + i);
+	*up = 0xBeef;
+	if (*up != 0xBeef) {
+	    printf("write failed (%x)\n", *up);
+	    exit(3);
+	}
+    }
+
+    exit(0);
+#else
+    printf("1\n");
+    exit(1);
+#endif
+    return 0;
+}
+EOCP
+set try
+if eval $compile_ok; then
+	echo "(This test may dump core.)" >&4
+	./try >&2 >/dev/null
+	case "$?" in
+	0)	cat >&4 <<EOM
+You can access character data pretty unalignedly.
+EOM
+		d_u32align="$undef"
+		;;
+	*)	cat >&4 <<EOM
+It seems that you must access character data in an aligned manner.
+EOM
+		d_u32align="$define"
+		;;
+	esac
+	$rm -f core core.try.* try.core
+else
+	rp='Can you access character data at unaligned addresses?'
+	dflt='n'
+	. ./myread
+	case "$ans" in
+	[yY]*)	d_u32align="$undef"  ;;
+	*)	d_u32align="$define" ;;
+	esac
+fi
+
+: see if ualarm exists
+set ualarm d_ualarm
+eval $inlibc
+
 : see if umask exists
 set umask d_umask
 eval $inlibc
 
+: see if usleep exists
+set usleep d_usleep
+eval $inlibc
+
 : see if ustat exists
 set ustat d_ustat
 eval $inlibc
@@ -12637,6 +12869,10 @@ eval $inlibc
 set wctomb d_wctomb
 eval $inlibc
 
+: see if writev exists
+set writev d_writev
+eval $inlibc
+
 : preserve RCS keywords in files with variable substitution, grrr
 Date='$Date'
 Id='$Id'
@@ -12644,17 +12880,6 @@ Log='$Log'
 RCSfile='$RCSfile'
 Revision='$Revision'
 
-case "$crosscompile" in
-''|[nN]*) crosscompile="$undef" ;;
-esac
-
-case "$osname" in
-next|rhapsody|darwin) multiarch="$define" ;;
-esac
-case "$multiarch" in
-''|[nN]*) multiarch="$undef" ;;
-esac
-
 : check for alignment requirements
 echo " "
 case "$crosscompile$multiarch" in
@@ -12714,84 +12939,6 @@ esac
 : set the base revision
 baserev=5.0
 
-: check for ordering of bytes in a long
-echo " "
-case "$crosscompile$multiarch" in
-*$define*)
-	$cat <<EOM
-You seem to be either cross-compiling or doing a multiarchitecture build,
-skipping the byteorder check.
-
-EOM
-	byteorder='0xffff'
-	;;
-*)
-	case "$byteorder" in
-	'')
-		$cat <<'EOM'
-In the following, larger digits indicate more significance.  A big-endian
-machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
-little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
-machines may have weird orders like 3412.  A Cray will report 87654321,
-an Alpha will report 12345678. If the test program works the default is
-probably right.
-I'm now running the test program...
-EOM
-		$cat >try.c <<'EOCP'
-#include <stdio.h>
-int main()
-{
-	int i;
-	union {
-		unsigned long l;
-		char c[sizeof(long)];
-	} u;
-
-	if (sizeof(long) > 4)
-		u.l = (0x08070605L << 32) | 0x04030201L;
-	else
-		u.l = 0x04030201L;
-	for (i = 0; i < sizeof(long); i++)
-		printf("%c", u.c[i]+'0');
-	printf("\n");
-	exit(0);
-}
-EOCP
-		xxx_prompt=y
-		set try
-		if eval $compile && ./try > /dev/null; then
-			dflt=`./try`
-			case "$dflt" in
-			[1-4][1-4][1-4][1-4]|12345678|87654321)
-				echo "(The test program ran ok.)"
-				echo "byteorder=$dflt"
-				xxx_prompt=n
-			;;
-			????|????????) echo "(The test program ran ok.)" ;;
-			*) echo "(The test program didn't run right for some reason.)" ;;
-			esac
-		else
-			dflt='4321'
-			cat <<'EOM'
-(I can't seem to compile the test program.  Guessing big-endian...)
-EOM
-		fi
-		case "$xxx_prompt" in
-		y)
-			rp="What is the order of bytes in a long?"
-			. ./myread
-			byteorder="$ans"
-			;;
-		*)	byteorder=$dflt
-			;;
-		esac
-		;;
-	esac
-	$rm -f try.c try
-	;;
-esac
-
-
 : how do we catenate cpp tokens here?
 echo " "
 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
@@ -15514,10 +15661,6 @@ eval $inhdr
 set sys/statvfs.h i_sysstatvfs
 eval $inhdr
 
-: see if this is a sys/uio.h system
-set sys/uio.h i_sysuio
-eval $inhdr
-
 : see if this is a sys/un.h system
 set sys/un.h i_sysun
 eval $inhdr
@@ -16025,6 +16168,7 @@ d_chown='$d_chown'
 d_chroot='$d_chroot'
 d_chsize='$d_chsize'
 d_closedir='$d_closedir'
+d_cmsghdr_s='$d_cmsghdr_s'
 d_const='$d_const'
 d_crypt='$d_crypt'
 d_csh='$d_csh'
@@ -16079,6 +16223,7 @@ d_gethbyname='$d_gethbyname'
 d_gethent='$d_gethent'
 d_gethname='$d_gethname'
 d_gethostprotos='$d_gethostprotos'
+d_getitimer='$d_getitimer'
 d_getlogin='$d_getlogin'
 d_getmnt='$d_getmnt'
 d_getmntent='$d_getmntent'
@@ -16151,6 +16296,7 @@ d_msg_peek='$d_msg_peek'
 d_msg_proxy='$d_msg_proxy'
 d_msgctl='$d_msgctl'
 d_msgget='$d_msgget'
+d_msghdr_s='$d_msghdr_s'
 d_msgrcv='$d_msgrcv'
 d_msgsnd='$d_msgsnd'
 d_msync='$d_msync'
@@ -16184,6 +16330,8 @@ d_qgcvt='$d_qgcvt'
 d_quad='$d_quad'
 d_readdir='$d_readdir'
 d_readlink='$d_readlink'
+d_readv='$d_readv'
+d_recvmsg='$d_recvmsg'
 d_rename='$d_rename'
 d_rewinddir='$d_rewinddir'
 d_rmdir='$d_rmdir'
@@ -16201,11 +16349,13 @@ d_semctl_semid_ds='$d_semctl_semid_ds'
 d_semctl_semun='$d_semctl_semun'
 d_semget='$d_semget'
 d_semop='$d_semop'
+d_sendmsg='$d_sendmsg'
 d_setegid='$d_setegid'
 d_seteuid='$d_seteuid'
 d_setgrent='$d_setgrent'
 d_setgrps='$d_setgrps'
 d_sethent='$d_sethent'
+d_setitimer='$d_setitimer'
 d_setlinebuf='$d_setlinebuf'
 d_setlocale='$d_setlocale'
 d_setnent='$d_setnent'
@@ -16281,9 +16431,12 @@ d_time='$d_time'
 d_times='$d_times'
 d_truncate='$d_truncate'
 d_tzname='$d_tzname'
+d_u32align='$d_u32align'
+d_ualarm='$d_ualarm'
 d_umask='$d_umask'
 d_uname='$d_uname'
 d_union_semun='$d_union_semun'
+d_usleep='$d_usleep'
 d_ustat='$d_ustat'
 d_vendorarch='$d_vendorarch'
 d_vendorbin='$d_vendorbin'
@@ -16298,6 +16451,7 @@ d_wait4='$d_wait4'
 d_waitpid='$d_waitpid'
 d_wcstombs='$d_wcstombs'
 d_wctomb='$d_wctomb'
+d_writev='$d_writev'
 d_xenix='$d_xenix'
 date='$date'
 db_hashtype='$db_hashtype'
diff --git a/MANIFEST b/MANIFEST
index 2d05186..11c4c57 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -1516,6 +1516,7 @@ t/lib/lc-currency.t	See if Locale::Codes work
 t/lib/lc-language.t	See if Locale::Codes work
 t/lib/lc-uk.t	See if Locale::Codes work
 t/lib/md5-aaa.t	See if Digest::MD5 extension works
+t/lib/md5-align.t	See if Digest::MD5 extension works
 t/lib/md5-badf.t	See if Digest::MD5 extension works
 t/lib/md5-file.t	See if Digest::MD5 extension works
 t/lib/mimeb64.t			see whether MIME::Base64 works
diff --git a/Porting/Glossary b/Porting/Glossary
index 61a52c5..d621d2f 100644
--- a/Porting/Glossary
+++ b/Porting/Glossary
@@ -437,6 +437,10 @@ d_closedir (d_closedir.U):
 	This variable conditionally defines HAS_CLOSEDIR if closedir() is
 	available.
 
+d_cmsghdr_s (d_cmsghdr_s.U):
+	This variable conditionally defines the HAS_STRUCT_CMSGHDR symbol,
+	which indicates that the struct cmsghdr is supported.
+
 d_const (d_const.U):
 	This variable conditionally defines the HASCONST symbol, which
 	indicates to the C program that this C compiler knows about the
@@ -689,6 +693,10 @@ d_gethostprotos (d_gethostprotos.U):
 	prototypes for the various gethost*() functions.  
 	See also netdbtype.U for probing for various netdb types.
 
+d_getitimer (d_getitimer.U):
+	This variable conditionally defines the HAS_GETITIMER symbol, which
+	indicates to the C program that the getitimer() routine is available.
+
 d_getlogin (d_getlogin.U):
 	This variable conditionally defines the HAS_GETLOGIN symbol, which
 	indicates to the C program that the getlogin() routine is available
@@ -1024,6 +1032,10 @@ d_msgget (d_msgget.U):
 	This variable conditionally defines the HAS_MSGGET symbol, which
 	indicates to the C program that the msgget() routine is available.
 
+d_msghdr_s (d_msghdr_s.U):
+	This variable conditionally defines the HAS_STRUCT_MSGHDR symbol,
+	which indicates that the struct msghdr is supported.
+
 d_msgrcv (d_msgrcv.U):
 	This variable conditionally defines the HAS_MSGRCV symbol, which
 	indicates to the C program that the msgrcv() routine is available.
@@ -1226,6 +1238,14 @@ d_readlink (d_readlink.U):
 	indicates to the C program that the readlink() routine is available
 	to read the value of a symbolic link.
 
+d_readv (d_readv.U):
+	This variable conditionally defines the HAS_READV symbol, which
+	indicates to the C program that the readv() routine is available.
+
+d_recvmsg (d_recvmsg.U):
+	This variable conditionally defines the HAS_RECVMSG symbol, which
+	indicates to the C program that the recvmsg() routine is available.
+
 d_rename (d_rename.U):
 	This variable conditionally defines the HAS_RENAME symbol, which
 	indicates to the C program that the rename() routine is available
@@ -1305,6 +1325,10 @@ d_semop (d_semop.U):
 	This variable conditionally defines the HAS_SEMOP symbol, which
 	indicates to the C program that the semop() routine is available.
 
+d_sendmsg (d_sendmsg.U):
+	This variable conditionally defines the HAS_SENDMSG symbol, which
+	indicates to the C program that the sendmsg() routine is available.
+
 d_setegid (d_setegid.U):
 	This variable conditionally defines the HAS_SETEGID symbol, which
 	indicates to the C program that the setegid() routine is available
@@ -1329,6 +1353,10 @@ d_sethent (d_sethent.U):
 	This variable conditionally defines HAS_SETHOSTENT if sethostent() is
 	available.
 
+d_setitimer (d_setitimer.U):
+	This variable conditionally defines the HAS_SETITIMER symbol, which
+	indicates to the C program that the setitimer() routine is available.
+
 d_setlinebuf (d_setlnbuf.U):
 	This variable conditionally defines the HAS_SETLINEBUF symbol, which
 	indicates to the C program that the setlinebuf() routine is available
@@ -1663,6 +1691,14 @@ d_tzname (d_tzname.U):
 	This variable conditionally defines HAS_TZNAME if tzname[] is
 	available to access timezone names.
 
+d_u32align (d_u32align.U):
+	This variable tells whether you must access character data
+	through U32-aligned pointers.
+
+d_ualarm (d_ualarm.U):
+	This variable conditionally defines the HAS_UALARM symbol, which
+	indicates to the C program that the ualarm() routine is available.
+
 d_umask (d_umask.U):
 	This variable conditionally defines the HAS_UMASK symbol, which
 	indicates to the C program that the umask() routine is available.
@@ -1677,6 +1713,10 @@ d_union_semun (d_union_semun.U):
 	This variable conditionally defines HAS_UNION_SEMUN if the
 	union semun is defined by including <sys/sem.h>.
 
+d_usleep (d_usleep.U):
+	This variable conditionally defines HAS_USLEEP if usleep() is
+	available to do high granularity sleeps.
+
 d_ustat (d_ustat.U):
 	This variable conditionally defines HAS_USTAT if ustat() is
 	available to query file system statistics by dev_t.
@@ -1737,6 +1777,10 @@ d_wctomb (d_wctomb.U):
 	indicates to the C program that the wctomb() routine is available
 	to convert a wide character to a multibyte.
 
+d_writev (d_writev.U):
+	This variable conditionally defines the HAS_WRITEV symbol, which
+	indicates to the C program that the writev() routine is available.
+
 d_xenix (Guess.U):
 	This variable conditionally defines the symbol XENIX, which alerts
 	the C program that it runs under Xenix.
diff --git a/Porting/config.sh b/Porting/config.sh
index 3853ffb..1e09d64 100644
--- a/Porting/config.sh
+++ b/Porting/config.sh
@@ -8,7 +8,7 @@
 
 # Package name      : perl5
 # Source directory  : .
-# Configuration time: Tue Mar 27 07:55:38 EET DST 2001
+# Configuration time: Thu Apr  5 20:36:09 EET DST 2001
 # Configured by     : jhi
 # Target system     : osf1 alpha.hut.fi v4.0 878 alpha 
 
@@ -62,7 +62,7 @@ ccsymbols='__alpha=1 __LANGUAGE_C__=1 __osf__=1 __unix__=1 _LONGLONG=1 _SYSTYPE_
 ccversion='V5.6-082'
 cf_by='jhi'
 cf_email='yourname@yourhost.yourplace.com'
-cf_time='Tue Mar 27 07:55:38 EET DST 2001'
+cf_time='Thu Apr  5 20:36:09 EET DST 2001'
 charsize='1'
 chgrp=''
 chmod=''
@@ -121,6 +121,7 @@ d_chown='define'
 d_chroot='define'
 d_chsize='undef'
 d_closedir='define'
+d_cmsghdr_s='define'
 d_const='define'
 d_crypt='define'
 d_csh='define'
@@ -175,6 +176,7 @@ d_gethbyname='define'
 d_gethent='define'
 d_gethname='define'
 d_gethostprotos='define'
+d_getitimer='define'
 d_getlogin='define'
 d_getmnt='undef'
 d_getmntent='undef'
@@ -247,6 +249,7 @@ d_msg_peek='define'
 d_msg_proxy='undef'
 d_msgctl='define'
 d_msgget='define'
+d_msghdr_s='define'
 d_msgrcv='define'
 d_msgsnd='define'
 d_msync='define'
@@ -280,6 +283,8 @@ d_qgcvt='undef'
 d_quad='define'
 d_readdir='define'
 d_readlink='define'
+d_readv='define'
+d_recvmsg='define'
 d_rename='define'
 d_rewinddir='define'
 d_rmdir='define'
@@ -297,11 +302,13 @@ d_semctl_semid_ds='define'
 d_semctl_semun='define'
 d_semget='define'
 d_semop='define'
+d_sendmsg='define'
 d_setegid='define'
 d_seteuid='define'
 d_setgrent='define'
 d_setgrps='define'
 d_sethent='define'
+d_setitimer='define'
 d_setlinebuf='define'
 d_setlocale='define'
 d_setnent='define'
@@ -377,9 +384,12 @@ d_time='define'
 d_times='define'
 d_truncate='define'
 d_tzname='define'
+d_u32align='define'
+d_ualarm='define'
 d_umask='define'
 d_uname='define'
 d_union_semun='undef'
+d_usleep='define'
 d_ustat='define'
 d_vendorarch='undef'
 d_vendorbin='undef'
@@ -394,6 +404,7 @@ d_wait4='define'
 d_waitpid='define'
 d_wcstombs='define'
 d_wctomb='define'
+d_writev='define'
 d_xenix='undef'
 date='date'
 db_hashtype='u_int32_t'
@@ -404,7 +415,7 @@ dlext='so'
 dlsrc='dl_dlopen.xs'
 doublesize='8'
 drand01='drand48()'
-dynamic_ext='B ByteLoader DB_File Data/Dumper Devel/DProf Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call IO IPC/SysV MIME/Base64 NDBM_File ODBM_File Opcode POSIX PerlIO/Scalar SDBM_File Socket Storable Sys/Hostname Sys/Syslog Thread attrs re'
+dynamic_ext='B ByteLoader Cwd DB_File Data/Dumper Devel/DProf Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call IO IPC/SysV MIME/Base64 NDBM_File ODBM_File Opcode POSIX PerlIO/Scalar PerlIO/Via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Thread XS/Typemap attrs re'
 eagain='EAGAIN'
 ebcdic='undef'
 echo='echo'
@@ -413,7 +424,7 @@ emacs=''
 eunicefix=':'
 exe_ext=''
 expr='expr'
-extensions='B ByteLoader DB_File Data/Dumper Devel/DProf Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call IO IPC/SysV MIME/Base64 NDBM_File ODBM_File Opcode POSIX PerlIO/Scalar SDBM_File Socket Storable Sys/Hostname Sys/Syslog Thread attrs re Errno'
+extensions='B ByteLoader Cwd DB_File Data/Dumper Devel/DProf Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call IO IPC/SysV MIME/Base64 NDBM_File ODBM_File Opcode POSIX PerlIO/Scalar PerlIO/Via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Thread XS/Typemap attrs re Errno'
 fflushNULL='define'
 fflushall='undef'
 find=''
@@ -553,7 +564,7 @@ issymlink='test -h'
 ivdformat='"ld"'
 ivsize='8'
 ivtype='long'
-known_extensions='B ByteLoader DB_File Data/Dumper Devel/DProf Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call GDBM_File IO IPC/SysV MIME/Base64 NDBM_File ODBM_File Opcode POSIX PerlIO/Scalar SDBM_File Socket Storable Sys/Hostname Sys/Syslog Thread attrs re'
+known_extensions='B ByteLoader Cwd DB_File Data/Dumper Devel/DProf Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call GDBM_File IO IPC/SysV MIME/Base64 NDBM_File ODBM_File Opcode POSIX PerlIO/Scalar PerlIO/Via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Thread XS/Typemap attrs re'
 ksh=''
 ld='ld'
 lddlflags='-shared -expect_unresolved "*" -msym -std -s'
diff --git a/Porting/config_H b/Porting/config_H
index fb8bf3b..5c1db50 100644
--- a/Porting/config_H
+++ b/Porting/config_H
@@ -17,7 +17,7 @@
 /*
  * Package name      : perl5
  * Source directory  : .
- * Configuration time: Tue Mar 27 07:55:38 EET DST 2001
+ * Configuration time: Thu Apr  5 20:36:09 EET DST 2001
  * Configured by     : jhi
  * Target system     : osf1 alpha.hut.fi v4.0 878 alpha 
  */
@@ -645,6 +645,12 @@
  */
 #define HAS_UMASK		/**/
 
+/* HAS_USLEEP:
+ *	This symbol, if defined, indicates that the usleep routine is
+ *	available to let the process sleep on a sub-second accuracy.
+ */
+#define HAS_USLEEP		/**/
+
 /* HASVOLATILE:
  *	This symbol, if defined, indicates that this C compiler knows about
  *	the volatile declaration.
@@ -1241,6 +1247,12 @@
  */
 /*#define VOID_CLOSEDIR		/ **/
 
+/* HAS_STRUCT_CMSGHDR:
+ *	This symbol, if defined, indicates that the struct cmsghdr
+ *	is supported.
+ */
+#define HAS_STRUCT_CMSGHDR	/**/
+
 /* HAS_CSH:
  *	This symbol, if defined, indicates that the C-shell exists.
  */
@@ -1462,6 +1474,12 @@
  */
 #define	HAS_GETHOST_PROTOS	/**/
 
+/* HAS_GETITIMER:
+ *	This symbol, if defined, indicates that the getitimer routine is
+ *	available to return interval timers.
+ */
+#define HAS_GETITIMER		/**/
+
 /* HAS_GETMNT:
  *	This symbol, if defined, indicates that the getmnt routine is
  *	available to get filesystem mount info by filename.
@@ -1770,6 +1788,12 @@
  */
 #define HAS_MSG		/**/
 
+/* HAS_STRUCT_MSGHDR:
+ *	This symbol, if defined, indicates that the struct msghdr
+ *	is supported.
+ */
+#define HAS_STRUCT_MSGHDR	/**/
+
 /* HAS_OFF64_T:
  *	This symbol will be defined if the C compiler supports off64_t.
  */
@@ -1810,6 +1834,19 @@
 #define SCHED_YIELD	sched_yield()	/**/
 #define HAS_SCHED_YIELD	/**/
 
+/* HAS_READV:
+ *	This symbol, if defined, indicates that the readv routine is
+ *	available to do gather reads.  You will also need <sys/uio.h>
+ *	and there I_SYSUIO.
+ */
+#define HAS_READV		/**/
+
+/* HAS_RECVMSG:
+ *	This symbol, if defined, indicates that the recvmsg routine is
+ *	available to send structured socket messages.
+ */
+#define HAS_RECVMSG		/**/
+
 /* HAS_SAFE_BCOPY:
  *	This symbol, if defined, indicates that the bcopy routine is available
  *	to copy potentially overlapping memory blocks. Otherwise you should
@@ -1848,6 +1885,12 @@
  */
 #define HAS_SEM		/**/
 
+/* HAS_SENDMSG:
+ *	This symbol, if defined, indicates that the sendmsg routine is
+ *	available to send structured socket messages.
+ */
+#define HAS_SENDMSG		/**/
+
 /* HAS_SETGRENT:
  *	This symbol, if defined, indicates that the setgrent routine is
  *	available for initializing sequential access of the group database.
@@ -1867,6 +1910,12 @@
  */
 #define HAS_SETHOSTENT		/**/
 
+/* HAS_SETITIMER:
+ *	This symbol, if defined, indicates that the setitimer routine is
+ *	available to set interval timers.
+ */
+#define HAS_SETITIMER		/**/
+
 /* HAS_SETNETENT:
  *	This symbol, if defined, indicates that the setnetent() routine is
  *	available.
@@ -2202,6 +2251,12 @@
  */
 #define HAS_TIMES		/**/
 
+/* HAS_UALARM:
+ *	This symbol, if defined, indicates that the ualarm routine is
+ *	available to do alarms with microsecond granularity.
+ */
+#define HAS_UALARM		/**/
+
 /* HAS_UNION_SEMUN:
  *	This symbol, if defined, indicates that the union semun is
  *	defined by including <sys/sem.h>.  If not, the user code
@@ -2257,6 +2312,12 @@
 #define HAS_VPRINTF	/**/
 /*#define USE_CHAR_VSPRINTF 	/ **/
 
+/* HAS_WRITEV:
+ *	This symbol, if defined, indicates that the writev routine is
+ *	available to do scatter writes.
+ */
+#define HAS_WRITEV		/**/
+
 /* USE_DYNAMIC_LOADING:
  *	This symbol, if defined, indicates that dynamic loading of
  *	some sort is available.
@@ -3265,4 +3326,10 @@
  */
 /*#define HAS_SOCKATMARK		/ **/
 
+/* U32_ALIGNMENT_REQUIRED:
+ *	This symbol, if defined, indicates that you must access
+ *	character data through U32-aligned pointers.
+ */
+#define U32_ALIGNMENT_REQUIRED	/**/
+
 #endif
diff --git a/config_h.SH b/config_h.SH
index eb95593..0b828e6 100644
--- a/config_h.SH
+++ b/config_h.SH
@@ -665,6 +665,12 @@ sed <<!GROK!THIS! >$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un
  */
 #$d_umask HAS_UMASK		/**/
 
+/* HAS_USLEEP:
+ *	This symbol, if defined, indicates that the usleep routine is
+ *	available to let the process sleep on a sub-second accuracy.
+ */
+#$d_usleep HAS_USLEEP		/**/
+
 /* HASVOLATILE:
  *	This symbol, if defined, indicates that this C compiler knows about
  *	the volatile declaration.
@@ -1261,6 +1267,12 @@ sed <<!GROK!THIS! >$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un
  */
 #$d_void_closedir VOID_CLOSEDIR		/**/
 
+/* HAS_STRUCT_CMSGHDR:
+ *	This symbol, if defined, indicates that the struct cmsghdr
+ *	is supported.
+ */
+#$d_cmsghdr_s HAS_STRUCT_CMSGHDR	/**/
+
 /* HAS_CSH:
  *	This symbol, if defined, indicates that the C-shell exists.
  */
@@ -1482,6 +1494,12 @@ sed <<!GROK!THIS! >$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un
  */
 #$d_gethostprotos	HAS_GETHOST_PROTOS	/**/
 
+/* HAS_GETITIMER:
+ *	This symbol, if defined, indicates that the getitimer routine is
+ *	available to return interval timers.
+ */
+#$d_getitimer HAS_GETITIMER		/**/
+
 /* HAS_GETMNT:
  *	This symbol, if defined, indicates that the getmnt routine is
  *	available to get filesystem mount info by filename.
@@ -1790,6 +1808,12 @@ sed <<!GROK!THIS! >$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un
  */
 #$d_msg HAS_MSG		/**/
 
+/* HAS_STRUCT_MSGHDR:
+ *	This symbol, if defined, indicates that the struct msghdr
+ *	is supported.
+ */
+#$d_msghdr_s HAS_STRUCT_MSGHDR	/**/
+
 /* HAS_OFF64_T:
  *	This symbol will be defined if the C compiler supports off64_t.
  */
@@ -1830,6 +1854,19 @@ sed <<!GROK!THIS! >$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un
 #define SCHED_YIELD	$sched_yield	/**/
 #$d_sched_yield HAS_SCHED_YIELD	/**/
 
+/* HAS_READV:
+ *	This symbol, if defined, indicates that the readv routine is
+ *	available to do gather reads.  You will also need <sys/uio.h>
+ *	and there I_SYSUIO.
+ */
+#$d_readv HAS_READV		/**/
+
+/* HAS_RECVMSG:
+ *	This symbol, if defined, indicates that the recvmsg routine is
+ *	available to send structured socket messages.
+ */
+#$d_recvmsg HAS_RECVMSG		/**/
+
 /* HAS_SAFE_BCOPY:
  *	This symbol, if defined, indicates that the bcopy routine is available
  *	to copy potentially overlapping memory blocks. Otherwise you should
@@ -1868,6 +1905,12 @@ sed <<!GROK!THIS! >$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un
  */
 #$d_sem HAS_SEM		/**/
 
+/* HAS_SENDMSG:
+ *	This symbol, if defined, indicates that the sendmsg routine is
+ *	available to send structured socket messages.
+ */
+#$d_sendmsg HAS_SENDMSG		/**/
+
 /* HAS_SETGRENT:
  *	This symbol, if defined, indicates that the setgrent routine is
  *	available for initializing sequential access of the group database.
@@ -1887,6 +1930,12 @@ sed <<!GROK!THIS! >$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un
  */
 #$d_sethent HAS_SETHOSTENT		/**/
 
+/* HAS_SETITIMER:
+ *	This symbol, if defined, indicates that the setitimer routine is
+ *	available to set interval timers.
+ */
+#$d_setitimer HAS_SETITIMER		/**/
+
 /* HAS_SETNETENT:
  *	This symbol, if defined, indicates that the setnetent() routine is
  *	available.
@@ -2222,6 +2271,12 @@ sed <<!GROK!THIS! >$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un
  */
 #$d_times HAS_TIMES		/**/
 
+/* HAS_UALARM:
+ *	This symbol, if defined, indicates that the ualarm routine is
+ *	available to do alarms with microsecond granularity.
+ */
+#$d_ualarm HAS_UALARM		/**/
+
 /* HAS_UNION_SEMUN:
  *	This symbol, if defined, indicates that the union semun is
  *	defined by including <sys/sem.h>.  If not, the user code
@@ -2277,6 +2332,12 @@ sed <<!GROK!THIS! >$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un
 #$d_vprintf HAS_VPRINTF	/**/
 #$d_charvspr USE_CHAR_VSPRINTF 	/**/
 
+/* HAS_WRITEV:
+ *	This symbol, if defined, indicates that the writev routine is
+ *	available to do scatter writes.
+ */
+#$d_writev HAS_WRITEV		/**/
+
 /* USE_DYNAMIC_LOADING:
  *	This symbol, if defined, indicates that dynamic loading of
  *	some sort is available.
@@ -3285,5 +3346,11 @@ sed <<!GROK!THIS! >$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un
  */
 #$d_sockatmark HAS_SOCKATMARK		/**/
 
+/* U32_ALIGNMENT_REQUIRED:
+ *	This symbol, if defined, indicates that you must access
+ *	character data through U32-aligned pointers.
+ */
+#$d_u32align U32_ALIGNMENT_REQUIRED	/**/
+
 #endif
 !GROK!THIS!
diff --git a/configure.com b/configure.com
index 6bb3040..8b13c1f 100644
--- a/configure.com
+++ b/configure.com
@@ -4982,6 +4982,7 @@ $ WC "d_gethbyname='" + d_gethbyname + "'"
 $ WC "d_gethent='" + d_gethent + "'"
 $ WC "d_gethname='" + d_gethname + "'"
 $ WC "d_gethostprotos='" + d_gethostprotos + "'"
+$ WC "d_getitimer='undef'"
 $ WC "d_getlogin='define'"
 $ WC "d_getmnt='undef'"
 $ WC "d_getmntent='undef'"
@@ -5109,6 +5110,7 @@ $ WC "d_seteuid='undef'"
 $ WC "d_setgrent='undef'"
 $ WC "d_setgrps='undef'"
 $ WC "d_sethent='" + d_sethent + "'"
+$ WC "d_setitimer='undef'"
 $ WC "d_setlinebuf='undef'"
 $ WC "d_setlocale='" + d_setlocale + "'"
 $ WC "d_setnent='" + d_setnent + "'"
@@ -5178,10 +5180,13 @@ $ WC "d_telldirproto='define'"
 $ WC "d_times='define'"
 $ WC "d_truncate='" + d_truncate + "'"
 $ WC "d_tzname='undef'"
+$ WC "d_u32align='define'"
+$ WC "d_ualarm='undef'"
 $ WC "d_umask='define'"
 $ WC "d_uname='" + d_uname + "'"
 $ WC "d_union_semun='undef'"
 $ WC "d_unlink_all_versions='undef'"
+$ WC "d_usleep='undef'"
 $ WC "d_ustat='undef'"
 $ WC "d_vendorarch='undef'"
 $ WC "d_vendorlib='undef'"
diff --git a/epoc/config.sh b/epoc/config.sh
index 2c4c03e..7606769 100644
--- a/epoc/config.sh
+++ b/epoc/config.sh
@@ -115,6 +115,7 @@ d_chsize='undef'
 d_closedir='undef'
 d_cmsghdr_s='undef'
 d_const='define'
+d_cmsghdr_s='undef'
 d_crypt='undef'
 d_csh='undef'
 d_cuserid='undef'
@@ -166,6 +167,7 @@ d_gethbyname='define'
 d_gethent='undef'
 d_gethname='undef'
 d_gethostprotos='define'
+d_getitimer='undef'
 d_getlogin='undef'
 d_getmntent='undef'
 d_getnbyaddr='undef'
@@ -235,6 +237,7 @@ d_msg_oob='undef'
 d_msg_peek='undef'
 d_msg_proxy='undef'
 d_msgctl='undef'
+d_msghdr_s='undef'
 d_msgget='undef'
 d_msghdr_s='undef'
 d_msgrcv='undef'
@@ -269,6 +272,8 @@ d_readdir='define'
 d_readlink='undef'
 d_readv='undef'
 d_recvmsg='undef'
+d_readv='undef'
+d_recvmsg='undef'
 d_rename='define'
 d_rewinddir='define'
 d_rmdir='define'
@@ -292,6 +297,7 @@ d_seteuid='undef'
 d_setgrent='undef'
 d_setgrps='undef'
 d_sethent='undef'
+d_setitimer='undef'
 d_setlinebuf='undef'
 d_setlocale='undef'
 d_setnent='undef'
@@ -363,6 +369,8 @@ d_time='undef'
 d_times='undef'
 d_truncate='undef'
 d_tzname='undef'
+d_u32align='define'
+d_ualarm='undef'
 d_umask='undef'
 d_uname='undef'
 d_union_semun='undef'
@@ -794,6 +802,7 @@ d_sqrtl='undef'
 d_getmnt='undef'
 d_statfs_f_flags='undef'
 d_statfs_s='undef'
+d_usleep='undef'
 d_ustat='undef'
 i_sysstatfs='undef'
 i_sysvfs='undef'
diff --git a/ext/Digest/MD5/Makefile.PL b/ext/Digest/MD5/Makefile.PL
index 9d59dba..31dcabf 100644
--- a/ext/Digest/MD5/Makefile.PL
+++ b/ext/Digest/MD5/Makefile.PL
@@ -5,10 +5,9 @@ use ExtUtils::MakeMaker;
 
 my @extra;
 @extra = (DEFINE => "-DU32_ALIGNMENT_REQUIRED")
-    if $Config{'byteorder'} ne '1234' ||
-       $Config{'byteorder'} ne '4321' ||
+    if !($Config{'byteorder'} eq '1234' || $Config{'byteorder'} eq '4321') ||
        $^O eq 'VMS' ||
-       $Config{u32_alignment_required};
+       $Config{d_u32align};
 
 WriteMakefile(
     'NAME'	   => 'Digest::MD5',
diff --git a/perl.h b/perl.h
index 7e5d994..ab7a8e8 100644
--- a/perl.h
+++ b/perl.h
@@ -718,6 +718,11 @@ typedef struct perl_mstats perl_mstats_t;
 #  define WIN32SCK_IS_STDSCK		/* don't pull in custom wsock layer */
 #endif
 
+/* In Tru64 use the 4.4BSD struct msghdr, not the 4.3 one */
+#if defined(__osf__) && defined(__alpha) && !defined(_SOCKADDR_LEN)
+#  define _SOCKADDR_LEN
+#endif
+
 #if defined(HAS_SOCKET) && !defined(VMS) /* VMS handles sockets via vmsish.h */
 # include <sys/socket.h>
 # if defined(USE_SOCKS) && defined(I_SOCKS)
@@ -3626,6 +3631,20 @@ typedef struct am_table_short AMTS;
    NVff
    NVgf
 
+   HAS_USLEEP
+   HAS_UALARM
+
+   HAS_SETITIMER
+   HAS_GETITIMER
+
+   HAS_SENDMSG
+   HAS_RECVMSG
+   HAS_READV
+   HAS_WRITEV
+   I_SYSUIO
+   HAS_STRUCT_MSGHDR
+   HAS_STRUCT_CMSGHDR
+
    so that Configure picks them up. */
 
 #endif /* Include guard */
diff --git a/t/lib/md5-align.t b/t/lib/md5-align.t
new file mode 100644
index 0000000..4176062
--- /dev/null
+++ b/t/lib/md5-align.t
@@ -0,0 +1,20 @@
+BEGIN {
+        chdir 't' if -d 't';
+        @INC = '../lib';
+}
+
+# Test that md5 works on unaligned memory blocks
+
+print "1..1\n";
+
+use strict;
+use Digest::MD5 qw(md5_hex);
+
+my $str = "\100" x 20;
+substr($str, 0, 1, "");  # chopping off first char makes the string unaligned
+
+#use Devel::Peek; Dump($str); 
+
+print "not " unless md5_hex($str) eq "c7ebb510e59ee96f404f288d14cc656a";
+print "ok 1\n";
+
diff --git a/uconfig.h b/uconfig.h
index 60239ac..6914151 100644
--- a/uconfig.h
+++ b/uconfig.h
@@ -641,6 +641,12 @@
  */
 /*#define HAS_UMASK		/ **/
 
+/* HAS_USLEEP:
+ *	This symbol, if defined, indicates that the usleep routine is
+ *	available to let the process sleep on a sub-second accuracy.
+ */
+/*#define HAS_USLEEP		/ **/
+
 /* HASVOLATILE:
  *	This symbol, if defined, indicates that this C compiler knows about
  *	the volatile declaration.
@@ -1237,6 +1243,12 @@
  */
 /*#define VOID_CLOSEDIR		/ **/
 
+/* HAS_STRUCT_CMSGHDR:
+ *	This symbol, if defined, indicates that the struct cmsghdr
+ *	is supported.
+ */
+/*#define HAS_STRUCT_CMSGHDR	/ **/
+
 /* HAS_CSH:
  *	This symbol, if defined, indicates that the C-shell exists.
  */
@@ -1458,6 +1470,12 @@
  */
 /*#define	HAS_GETHOST_PROTOS	/ **/
 
+/* HAS_GETITIMER:
+ *	This symbol, if defined, indicates that the getitimer routine is
+ *	available to return interval timers.
+ */
+/*#define HAS_GETITIMER		/ **/
+
 /* HAS_GETMNT:
  *	This symbol, if defined, indicates that the getmnt routine is
  *	available to get filesystem mount info by filename.
@@ -1766,6 +1784,12 @@
  */
 /*#define HAS_MSG		/ **/
 
+/* HAS_STRUCT_MSGHDR:
+ *	This symbol, if defined, indicates that the struct msghdr
+ *	is supported.
+ */
+/*#define HAS_STRUCT_MSGHDR	/ **/
+
 /* HAS_OFF64_T:
  *	This symbol will be defined if the C compiler supports off64_t.
  */
@@ -1806,6 +1830,19 @@
 #define SCHED_YIELD	sched_yield()	/**/
 /*#define HAS_SCHED_YIELD	/ **/
 
+/* HAS_READV:
+ *	This symbol, if defined, indicates that the readv routine is
+ *	available to do gather reads.  You will also need <sys/uio.h>
+ *	and there I_SYSUIO.
+ */
+/*#define HAS_READV		/ **/
+
+/* HAS_RECVMSG:
+ *	This symbol, if defined, indicates that the recvmsg routine is
+ *	available to send structured socket messages.
+ */
+/*#define HAS_RECVMSG		/ **/
+
 /* HAS_SAFE_BCOPY:
  *	This symbol, if defined, indicates that the bcopy routine is available
  *	to copy potentially overlapping memory blocks. Otherwise you should
@@ -1844,6 +1881,12 @@
  */
 /*#define HAS_SEM		/ **/
 
+/* HAS_SENDMSG:
+ *	This symbol, if defined, indicates that the sendmsg routine is
+ *	available to send structured socket messages.
+ */
+/*#define HAS_SENDMSG		/ **/
+
 /* HAS_SETGRENT:
  *	This symbol, if defined, indicates that the setgrent routine is
  *	available for initializing sequential access of the group database.
@@ -1863,6 +1906,12 @@
  */
 /*#define HAS_SETHOSTENT		/ **/
 
+/* HAS_SETITIMER:
+ *	This symbol, if defined, indicates that the setitimer routine is
+ *	available to set interval timers.
+ */
+/*#define HAS_SETITIMER		/ **/
+
 /* HAS_SETNETENT:
  *	This symbol, if defined, indicates that the setnetent() routine is
  *	available.
@@ -2198,6 +2247,12 @@
  */
 /*#define HAS_TIMES		/ **/
 
+/* HAS_UALARM:
+ *	This symbol, if defined, indicates that the ualarm routine is
+ *	available to do alarms with microsecond granularity.
+ */
+/*#define HAS_UALARM		/ **/
+
 /* HAS_UNION_SEMUN:
  *	This symbol, if defined, indicates that the union semun is
  *	defined by including <sys/sem.h>.  If not, the user code
@@ -2253,6 +2308,12 @@
 #define HAS_VPRINTF	/**/
 /*#define USE_CHAR_VSPRINTF 	/ **/
 
+/* HAS_WRITEV:
+ *	This symbol, if defined, indicates that the writev routine is
+ *	available to do scatter writes.
+ */
+/*#define HAS_WRITEV		/ **/
+
 /* USE_DYNAMIC_LOADING:
  *	This symbol, if defined, indicates that dynamic loading of
  *	some sort is available.
@@ -3261,4 +3322,10 @@
  */
 /*#define HAS_SOCKATMARK		/ **/
 
+/* U32_ALIGNMENT_REQUIRED:
+ *	This symbol, if defined, indicates that you must access
+ *	character data through U32-aligned pointers.
+ */
+#define U32_ALIGNMENT_REQUIRED	/**/
+
 #endif
diff --git a/uconfig.sh b/uconfig.sh
index f2afe30..9ded43b 100755
--- a/uconfig.sh
+++ b/uconfig.sh
@@ -52,6 +52,7 @@ d_chroot='undef'
 d_chsize='undef'
 d_closedir='undef'
 d_const='undef'
+d_cmsghdr_s='undef'
 d_crypt='undef'
 d_csh='undef'
 d_cuserid='undef'
@@ -105,6 +106,7 @@ d_gethbyname='undef'
 d_gethent='undef'
 d_gethname='undef'
 d_gethostprotos='undef'
+d_getitimer='undef'
 d_getlogin='undef'
 d_getmnt='undef'
 d_getmntent='undef'
@@ -178,6 +180,7 @@ d_msg_peek='undef'
 d_msg_proxy='undef'
 d_msgctl='undef'
 d_msgget='undef'
+d_msghdr_s='undef'
 d_msgrcv='undef'
 d_msgsnd='undef'
 d_msync='undef'
@@ -211,6 +214,8 @@ d_qgcvt='undef'
 d_quad='undef'
 d_readdir='undef'
 d_readlink='undef'
+d_readv='undef'
+d_recvmsg='undef'
 d_rename='undef'
 d_rewinddir='undef'
 d_rmdir='undef'
@@ -228,11 +233,13 @@ d_semctl_semid_ds='undef'
 d_semctl_semun='undef'
 d_semget='undef'
 d_semop='undef'
+d_sendmsg='undef'
 d_setegid='undef'
 d_seteuid='undef'
 d_setgrent='undef'
 d_setgrps='undef'
 d_sethent='undef'
+d_setitimer='undef'
 d_setlinebuf='undef'
 d_setlocale='undef'
 d_setnent='undef'
@@ -308,9 +315,12 @@ d_time='undef'
 d_times='undef'
 d_truncate='undef'
 d_tzname='undef'
+d_u32align='define'
+d_ualarm='undef'
 d_umask='undef'
 d_uname='undef'
 d_union_semun='undef'
+d_usleep='undef'
 d_ustat='undef'
 d_vendorarch='undef'
 d_vendorbin='undef'
@@ -325,6 +335,7 @@ d_wait4='undef'
 d_waitpid='undef'
 d_wcstombs='undef'
 d_wctomb='undef'
+d_writev='undef'
 d_xenix='undef'
 db_hashtype='u_int32_t'
 db_prefixtype='size_t'
diff --git a/vos/config.alpha.def b/vos/config.alpha.def
index 3128752..1242114 100644
--- a/vos/config.alpha.def
+++ b/vos/config.alpha.def
@@ -36,6 +36,7 @@ $d_charvspr='undef'
 $d_chown='undef'
 $d_chroot='undef'
 $d_chsize='undef'
+$d_cmsghdr_s='undef'
 $d_const='define'
 $d_crypt='undef'
 $d_csh='undef'
@@ -86,6 +87,7 @@ $d_gethbyname='define'
 $d_gethent='define'
 $d_gethname='define'
 $d_gethostprotos='define'
+$d_getitimer='undef'
 $d_getlogin='define'
 $d_getmnt='undef'
 $d_getmntent='undef'
@@ -156,6 +158,7 @@ $d_msg_dontroute='undef'
 $d_msg_oob='undef'
 $d_msg_peek='undef'
 $d_msg_proxy='undef'
+$d_msghdr_s='undef'
 $d_msync='undef'
 $d_munmap='undef'
 $d_mymalloc='undef'
@@ -187,6 +190,8 @@ $d_pwquota='undef'
 $d_quad='undef'
 $d_readdir='define'
 $d_readlink='define'
+$d_readv='undef'
+$d_recvmsg='undef'
 $d_rename='define'
 $d_rewinddir='define'
 $d_rmdir='define'
@@ -202,6 +207,7 @@ $d_select='define'
 $d_sem='undef'
 $d_semctl_semid_ds='undef'
 $d_semctl_semun='undef'
+$d_sendmsg='undef'
 $d_setegid='undef'
 $d_seteuid='undef'
 $d_setgrent='undef'
@@ -274,9 +280,12 @@ $d_telldirproto='undef'
 $d_times='define'
 $d_truncate='undef'
 $d_tzname='define'
+$d_u32align='define'
+$d_ualarm='undef'
 $d_umask='define'
 $d_uname='define'
 $d_union_semun='undef'
+$d_usleep='undef'
 $d_ustat='undef'
 $d_vendorarch='define'
 $d_vendorlib='define'
@@ -288,6 +297,7 @@ $d_wait4='undef'
 $d_waitpid='define'
 $d_wcstombs='define'
 $d_wctomb='define'
+$d_writev='undef'
 $db_hashtype='int'
 $db_prefixtype='int'
 $defvoidused='15'
diff --git a/vos/config.alpha.h b/vos/config.alpha.h
index a4d0f3d..c4291f9 100644
--- a/vos/config.alpha.h
+++ b/vos/config.alpha.h
@@ -442,6 +442,19 @@
  */
 #define HAS_READLINK		/**/
 
+/* HAS_READV:
+ *	This symbol, if defined, indicates that the readv routine is
+ *	available to do gather reads.  You will also need <sys/uio.h>
+ *	and there I_SYSUIO.
+ */
+/*#define HAS_READV		/**/
+
+/* HAS_RECVMSG:
+ *	This symbol, if defined, indicates that the recvmsg routine is
+ *	available to send structured socket messages.
+ */
+/*#define HAS_RECVMSG		/**/
+
 /* HAS_RENAME:
  *	This symbol, if defined, indicates that the rename routine is available
  *	to rename files.  Otherwise you should do the unlink(), link(), unlink()
@@ -667,6 +680,12 @@
  */
 #define HAS_UMASK		/**/
 
+/* HAS_USLEEP:
+ *	This symbol, if defined, indicates that the usleep routine is
+ *	available to let the process sleep on a sub-second accuracy.
+ */
+/*#define HAS_USLEEP		/**/
+
 /* HASVOLATILE:
  *	This symbol, if defined, indicates that this C compiler knows about
  *	the volatile declaration.
@@ -1258,6 +1277,12 @@
  */
 /*#define VOID_CLOSEDIR		/**/
 
+/* HAS_STRUCT_CMSGHDR:
+ *	This symbol, if defined, indicates that the struct cmsghdr
+ *	is supported.
+ */
+/*#define HAS_STRUCT_CMSGHDR	/ **/
+
 /* HAS_CSH:
  *	This symbol, if defined, indicates that the C-shell exists.
  */
@@ -1472,6 +1497,12 @@
  */
 #define	HAS_GETHOST_PROTOS	/**/
 
+/* HAS_GETITIMER:
+ *	This symbol, if defined, indicates that the getitimer routine is
+ *	available to return interval timers.
+ */
+/*#define HAS_GETITIMER		/**/
+
 /* HAS_GETMNT:
  *	This symbol, if defined, indicates that the getmnt routine is
  *	available to get filesystem mount info by filename.
@@ -1762,6 +1793,12 @@
  */
 /*#define HAS_MSG		/**/
 
+/* HAS_STRUCT_MSGHDR:
+ *	This symbol, if defined, indicates that the struct msghdr
+ *	is supported.
+ */
+/*#define HAS_STRUCT_MSGHDR	/ **/
+
 /* HAS_OFF64_T:
  *	This symbol will be defined if the C compiler supports off64_t.
  */
@@ -1840,6 +1877,12 @@
  */
 /*#define HAS_SEM		/**/
 
+/* HAS_SENDMSG:
+ *	This symbol, if defined, indicates that the sendmsg routine is
+ *	available to send structured socket messages.
+ */
+/*#define HAS_SENDMSG		/**/
+
 /* HAS_SETGRENT:
  *	This symbol, if defined, indicates that the setgrent routine is
  *	available for initializing sequential access of the group database.
@@ -1859,6 +1902,12 @@
  */
 #define HAS_SETHOSTENT		/**/
 
+/* HAS_SETITIMER:
+ *	This symbol, if defined, indicates that the setitimer routine is
+ *	available to set interval timers.
+ */
+/*#define HAS_SETITIMER		/**/
+
 /* HAS_SETNETENT:
  *	This symbol, if defined, indicates that the setnetent() routine is
  *	available.
@@ -2189,6 +2238,12 @@
  */
 #define HAS_TIMES		/**/
 
+/* HAS_UALARM:
+ *	This symbol, if defined, indicates that the ualarm routine is
+ *	available to do alarms with microsecond granularity.
+ */
+/*#define HAS_UALARM		/**/
+
 /* HAS_UNION_SEMUN:
  *	This symbol, if defined, indicates that the union semun is
  *	defined by including <sys/sem.h>.  If not, the user code
@@ -2244,6 +2299,12 @@
 #define HAS_VPRINTF	/**/
 /*#define USE_CHAR_VSPRINTF 	/**/
 
+/* HAS_WRITEV:
+ *	This symbol, if defined, indicates that the writev routine is
+ *	available to do scatter writes.
+ */
+/*#define HAS_WRITEV		/**/
+
 /* USE_DYNAMIC_LOADING:
  *	This symbol, if defined, indicates that dynamic loading of
  *	some sort is available.
@@ -3262,4 +3323,10 @@
  */
 /*#define HAS_SOCKATMARK		/ **/
 
+/* U32_ALIGNMENT_REQUIRED:
+ *	This symbol, if defined, indicates that you must access
+ *	character data through U32-aligned pointers.
+ */
+#define U32_ALIGNMENT_REQUIRED	/**/
+
 #endif
diff --git a/vos/config.ga.def b/vos/config.ga.def
index 7f0cbdb..63d2aa9 100644
--- a/vos/config.ga.def
+++ b/vos/config.ga.def
@@ -36,6 +36,7 @@ $d_charvspr='undef'
 $d_chown='define'
 $d_chroot='undef'
 $d_chsize='undef'
+$d_cmsghdr_s='undef'
 $d_const='define'
 $d_crypt='undef'
 $d_csh='define'
@@ -86,6 +87,7 @@ $d_gethbyname='define'
 $d_gethent='define'
 $d_gethname='define'
 $d_gethostprotos='define'
+$d_getitimer='undef'
 $d_getlogin='define'
 $d_getmnt='undef'
 $d_getmntent='undef'
@@ -156,6 +158,7 @@ $d_msg_dontroute='undef'
 $d_msg_oob='undef'
 $d_msg_peek='undef'
 $d_msg_proxy='undef'
+$d_msghdr_s='undef'
 $d_msync='undef'
 $d_munmap='define'
 $d_mymalloc='undef'
@@ -187,6 +190,8 @@ $d_pwquota='undef'
 $d_quad='undef'
 $d_readdir='define'
 $d_readlink='define'
+$d_readv='undef'
+$d_recvmsg='undef'
 $d_rename='define'
 $d_rewinddir='define'
 $d_rmdir='define'
@@ -202,6 +207,7 @@ $d_select='define'
 $d_sem='undef'
 $d_semctl_semid_ds='undef'
 $d_semctl_semun='undef'
+$d_sendmsg='undef'
 $d_setegid='define'
 $d_seteuid='define'
 $d_setgrent='undef'
@@ -274,9 +280,12 @@ $d_telldirproto='undef'
 $d_times='define'
 $d_truncate='undef'
 $d_tzname='define'
+$d_u32align='define'
+$d_ualarm='undef'
 $d_umask='define'
 $d_uname='define'
 $d_union_semun='undef'
+$d_usleep='undef'
 $d_ustat='undef'
 $d_vendorarch='define'
 $d_vendorlib='define'
@@ -288,6 +297,7 @@ $d_wait4='define'
 $d_waitpid='define'
 $d_wcstombs='define'
 $d_wctomb='define'
+$d_writev='undef'
 $db_hashtype='int'
 $db_prefixtype='int'
 $defvoidused='15'
diff --git a/vos/config.ga.h b/vos/config.ga.h
index f54c4de..642b65b 100644
--- a/vos/config.ga.h
+++ b/vos/config.ga.h
@@ -442,6 +442,19 @@
  */
 #define HAS_READLINK		/**/
 
+/* HAS_READV:
+ *	This symbol, if defined, indicates that the readv routine is
+ *	available to do gather reads.  You will also need <sys/uio.h>
+ *	and there I_SYSUIO.
+ */
+/*#define HAS_READV		/**/
+
+/* HAS_RECVMSG:
+ *	This symbol, if defined, indicates that the recvmsg routine is
+ *	available to send structured socket messages.
+ */
+/*#define HAS_RECVMSG		/**/
+
 /* HAS_RENAME:
  *	This symbol, if defined, indicates that the rename routine is available
  *	to rename files.  Otherwise you should do the unlink(), link(), unlink()
@@ -679,6 +692,12 @@
  */
 #define HAS_UMASK		/**/
 
+/* HAS_USLEEP:
+ *	This symbol, if defined, indicates that the usleep routine is
+ *	available to let the process sleep on a sub-second accuracy.
+ */
+/*#define HAS_USLEEP		/**/
+
 /* HASVOLATILE:
  *	This symbol, if defined, indicates that this C compiler knows about
  *	the volatile declaration.
@@ -1270,6 +1289,12 @@
  */
 /*#define VOID_CLOSEDIR		/**/
 
+/* HAS_STRUCT_CMSGHDR:
+ *	This symbol, if defined, indicates that the struct cmsghdr
+ *	is supported.
+ */
+/*#define HAS_STRUCT_CMSGHDR	/ **/
+
 /* HAS_CSH:
  *	This symbol, if defined, indicates that the C-shell exists.
  */
@@ -1484,6 +1509,12 @@
  */
 #define	HAS_GETHOST_PROTOS	/**/
 
+/* HAS_GETITIMER:
+ *	This symbol, if defined, indicates that the getitimer routine is
+ *	available to return interval timers.
+ */
+/*#define HAS_GETITIMER		/**/
+
 /* HAS_GETMNT:
  *	This symbol, if defined, indicates that the getmnt routine is
  *	available to get filesystem mount info by filename.
@@ -1774,6 +1805,12 @@
  */
 /*#define HAS_MSG		/**/
 
+/* HAS_STRUCT_MSGHDR:
+ *	This symbol, if defined, indicates that the struct msghdr
+ *	is supported.
+ */
+/*#define HAS_STRUCT_MSGHDR	/ **/
+
 /* HAS_OFF64_T:
  *	This symbol will be defined if the C compiler supports off64_t.
  */
@@ -1852,6 +1889,12 @@
  */
 /*#define HAS_SEM		/**/
 
+/* HAS_SENDMSG:
+ *	This symbol, if defined, indicates that the sendmsg routine is
+ *	available to send structured socket messages.
+ */
+/*#define HAS_SENDMSG		/**/
+
 /* HAS_SETGRENT:
  *	This symbol, if defined, indicates that the setgrent routine is
  *	available for initializing sequential access of the group database.
@@ -1871,6 +1914,12 @@
  */
 #define HAS_SETHOSTENT		/**/
 
+/* HAS_SETITIMER:
+ *	This symbol, if defined, indicates that the setitimer routine is
+ *	available to set interval timers.
+ */
+/*#define HAS_SETITIMER		/**/
+
 /* HAS_SETNETENT:
  *	This symbol, if defined, indicates that the setnetent() routine is
  *	available.
@@ -2189,6 +2238,12 @@
  */
 #define HAS_TIMES		/**/
 
+/* HAS_UALARM:
+ *	This symbol, if defined, indicates that the ualarm routine is
+ *	available to do alarms with microsecond granularity.
+ */
+/*#define HAS_UALARM		/**/
+
 /* HAS_UNION_SEMUN:
  *	This symbol, if defined, indicates that the union semun is
  *	defined by including <sys/sem.h>.  If not, the user code
@@ -2244,6 +2299,12 @@
 #define HAS_VPRINTF	/**/
 /*#define USE_CHAR_VSPRINTF 	/**/
 
+/* HAS_WRITEV:
+ *	This symbol, if defined, indicates that the writev routine is
+ *	available to do scatter writes.
+ */
+/*#define HAS_WRITEV		/**/
+
 /* USE_DYNAMIC_LOADING:
  *	This symbol, if defined, indicates that dynamic loading of
  *	some sort is available.
@@ -3262,4 +3323,10 @@
  */
 /*#define HAS_SOCKATMARK		/ **/
 
+/* U32_ALIGNMENT_REQUIRED:
+ *	This symbol, if defined, indicates that you must access
+ *	character data through U32-aligned pointers.
+ */
+#define U32_ALIGNMENT_REQUIRED	/**/
+
 #endif
diff --git a/win32/config.bc b/win32/config.bc
index f777579..b859846 100644
--- a/win32/config.bc
+++ b/win32/config.bc
@@ -106,6 +106,7 @@ d_chroot='undef'
 d_chsize='define'
 d_closedir='define'
 d_const='define'
+d_cmsghdr_s='undef'
 d_crypt='undef'
 d_csh='undef'
 d_cuserid='undef'
@@ -159,6 +160,7 @@ d_gethbyname='define'
 d_gethent='undef'
 d_gethname='define'
 d_gethostprotos='define'
+d_getitimer='undef'
 d_getlogin='define'
 d_getmnt='undef'
 d_getmntent='undef'
@@ -231,6 +233,7 @@ d_msg_peek='undef'
 d_msg_proxy='undef'
 d_msgctl='undef'
 d_msgget='undef'
+d_msghdr_s='undef'
 d_msgrcv='undef'
 d_msgsnd='undef'
 d_msync='undef'
@@ -264,6 +267,8 @@ d_qgcvt='undef'
 d_quad='undef'
 d_readdir='define'
 d_readlink='undef'
+d_readv='undef'
+d_recvmsg='undef'
 d_rename='define'
 d_rewinddir='define'
 d_rmdir='define'
@@ -281,11 +286,13 @@ d_semctl_semid_ds='undef'
 d_semctl_semun='undef'
 d_semget='undef'
 d_semop='undef'
+d_sendmsg='undef'
 d_setegid='undef'
 d_seteuid='undef'
 d_setgrent='undef'
 d_setgrps='undef'
 d_sethent='undef'
+d_setitimer='undef'
 d_setlinebuf='undef'
 d_setlocale='define'
 d_setnent='undef'
@@ -360,9 +367,12 @@ d_time='define'
 d_times='define'
 d_truncate='undef'
 d_tzname='define'
+d_u32align='define'
+d_ualarm='undef'
 d_umask='define'
 d_uname='define'
 d_union_semun='define'
+d_usleep='undef'
 d_ustat='undef'
 d_vendorarch='undef'
 d_vendorbin='undef'
@@ -377,6 +387,7 @@ d_wait4='undef'
 d_waitpid='define'
 d_wcstombs='define'
 d_wctomb='define'
+d_writev='undef'
 d_xenix='undef'
 date='date'
 db_hashtype='int'
diff --git a/win32/config.gc b/win32/config.gc
index 64ccb20..e3bd468 100644
--- a/win32/config.gc
+++ b/win32/config.gc
@@ -106,6 +106,7 @@ d_chroot='undef'
 d_chsize='define'
 d_closedir='define'
 d_const='define'
+d_cmsghdr_s='undef'
 d_crypt='undef'
 d_csh='undef'
 d_cuserid='undef'
@@ -159,6 +160,7 @@ d_gethbyname='define'
 d_gethent='undef'
 d_gethname='define'
 d_gethostprotos='define'
+d_getitimer='undef'
 d_getlogin='define'
 d_getmnt='undef'
 d_getmntent='undef'
@@ -231,6 +233,7 @@ d_msg_peek='undef'
 d_msg_proxy='undef'
 d_msgctl='undef'
 d_msgget='undef'
+d_msghdr_s='undef'
 d_msgrcv='undef'
 d_msgsnd='undef'
 d_msync='undef'
@@ -264,6 +267,8 @@ d_qgcvt='undef'
 d_quad='undef'
 d_readdir='define'
 d_readlink='undef'
+d_readv='undef'
+d_recvmsg='undef'
 d_rename='define'
 d_rewinddir='define'
 d_rmdir='define'
@@ -281,11 +286,13 @@ d_semctl_semid_ds='undef'
 d_semctl_semun='undef'
 d_semget='undef'
 d_semop='undef'
+d_sendmsg='undef'
 d_setegid='undef'
 d_seteuid='undef'
 d_setgrent='undef'
 d_setgrps='undef'
 d_sethent='undef'
+d_setitimer='undef'
 d_setlinebuf='undef'
 d_setlocale='define'
 d_setnent='undef'
@@ -360,9 +367,12 @@ d_time='define'
 d_times='define'
 d_truncate='undef'
 d_tzname='define'
+d_u32align='define'
+d_ualarm='undef'
 d_umask='define'
 d_uname='define'
 d_union_semun='define'
+d_usleep='undef'
 d_ustat='undef'
 d_vendorarch='undef'
 d_vendorbin='undef'
@@ -377,6 +387,7 @@ d_wait4='undef'
 d_waitpid='define'
 d_wcstombs='define'
 d_wctomb='define'
+d_writev='undef'
 d_xenix='undef'
 date='date'
 db_hashtype='int'
diff --git a/win32/config.vc b/win32/config.vc
index b243518..0495fd5 100644
--- a/win32/config.vc
+++ b/win32/config.vc
@@ -106,6 +106,7 @@ d_chroot='undef'
 d_chsize='define'
 d_closedir='define'
 d_const='define'
+d_cmsghdr_s='undef'
 d_crypt='undef'
 d_csh='undef'
 d_cuserid='undef'
@@ -159,6 +160,7 @@ d_gethbyname='define'
 d_gethent='undef'
 d_gethname='define'
 d_gethostprotos='define'
+d_getitimer='undef'
 d_getlogin='define'
 d_getmnt='undef'
 d_getmntent='undef'
@@ -231,6 +233,7 @@ d_msg_peek='undef'
 d_msg_proxy='undef'
 d_msgctl='undef'
 d_msgget='undef'
+d_msghdr_s='undef'
 d_msgrcv='undef'
 d_msgsnd='undef'
 d_msync='undef'
@@ -264,6 +267,8 @@ d_qgcvt='undef'
 d_quad='undef'
 d_readdir='define'
 d_readlink='undef'
+d_readv='undef'
+d_recvmsg='undef'
 d_rename='define'
 d_rewinddir='define'
 d_rmdir='define'
@@ -281,11 +286,13 @@ d_semctl_semid_ds='undef'
 d_semctl_semun='undef'
 d_semget='undef'
 d_semop='undef'
+d_sendmsg='undef'
 d_setegid='undef'
 d_seteuid='undef'
 d_setgrent='undef'
 d_setgrps='undef'
 d_sethent='undef'
+d_setitimer='undef'
 d_setlinebuf='undef'
 d_setlocale='define'
 d_setnent='undef'
@@ -360,9 +367,12 @@ d_time='define'
 d_times='define'
 d_truncate='undef'
 d_tzname='define'
+d_u32align='define'
+d_ualarm='undef'
 d_umask='define'
 d_uname='define'
 d_union_semun='define'
+d_usleep='undef'
 d_ustat='undef'
 d_vendorarch='undef'
 d_vendorbin='undef'
@@ -377,6 +387,7 @@ d_wait4='undef'
 d_waitpid='define'
 d_wcstombs='define'
 d_wctomb='define'
+d_writev='undef'
 d_xenix='undef'
 date='date'
 db_hashtype='int'