From: Jarkko Hietaniemi Date: Sun, 22 Nov 1998 18:21:07 +0000 (+0000) Subject: MSG_PROXY for GNU/Hurd (previously we believed that X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=de4597cb5b86db37759ed7b6341e933f7aac9aa6;p=p5sagit%2Fp5-mst-13.2.git MSG_PROXY for GNU/Hurd (previously we believed that all GNU libc platforms have MSG_PROXY. Untrue). In fact this ended up as a major MSG_* and SCM_* update. The MSG_XXX known to be enums in some versions of the glibc are now probed for and respective HAS_MSG_XXX are defined. While I was at it I noticed SCM_RIGHTS being similarly an enum. This reminded me of an ancient discussion in perl5-porters: http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/9612/msg01017.html The BSD socket interface has a nifty feature for passing file descriptors and credentials--via sockets. It may be too late to add this functionality to the CORE but at least Configure now probes for the functions, structs, and includes, defining the appropriate HAS_YYY and I_ZZZ, and the Socket extension exports the constants, in case somebody wants to write an extension for this interface. p4raw-id: //depot/cfgperl@2285 --- diff --git a/Configure b/Configure index 3726734..10b5331 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 Thu Nov 12 19:00:08 EET 1998 [metaconfig 3.0 PL70] +# Generated on Sun Nov 22 19:12:18 EET 1998 [metaconfig 3.0 PL70] # (with additional metaconfig patches by jhi@iki.fi) cat >/tmp/c1$$ <&4 +set d_iovec_s iovec iov_base $i_sysuio sys/uio.h +eval $hasfield +case "$d_iovec_s" in +"$define") echo "Yup, it does." >&4 + ;; +*) echo "Nope, it doesn't." >&4 + ;; +esac + +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 "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 < +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 + +set sendmsg d_sendmsg +eval $inlibc + +set recvmsg d_recvmsg +eval $inlibc + +echo " " +$echo $n "Checking to see if your system supports struct msghdr...$c" >&4 +set d_msghdr_s msghdr msg_name define sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h +eval $hasfield +case "$d_msghdr_s" in +"$define") echo "Yup, it does." >&4 + ;; +*) echo "Nope, it doesn't." >&4 + ;; +esac + +$echo $n "Checking to see if your system supports struct cmsghdr...$c" >&4 +set d_cmsghdr_s cmsghdr cmsg_len define sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h +eval $hasfield +case "$d_cmsghdr_s" in +"$define") echo "Yup, it does." >&4 + ;; +*) echo "Nope, it doesn't." >&4 + ;; +esac + : check for const keyword echo " " echo 'Checking to see if your C compiler knows about "const"...' >&4 @@ -6953,23 +7106,6 @@ set d_dirnamlen eval $setvar $rm -f try.c -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; foo.$field = 0; }" >> try.c; -if eval $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then - val="$define"; -else - val="$undef"; -fi; -set $varname; -eval $setvar; -$rm -f try.c try.o' - if $test X"$use64bits" = X"$define"; then : see if fstat64 exists @@ -7067,14 +7203,14 @@ EOCP echo " " echo "Checking to see if your system supports struct flock64..." >&4 if $h_fcntl; then - set d_flock64s flock64 l_len define fcntl.h + set d_flock64_s flock64 l_len define fcntl.h eval $hasfield else val="$undef" - set d_flock64s + set d_flock64_s eval $setvar fi - case "$d_flock64s" in + case "$d_flock64_s" in "$define") echo "Yup, it does." >&4 ;; *) echo "Nope, it doesn't." >&4 @@ -7084,9 +7220,9 @@ EOCP : check for struct dirent64 echo " " echo "Checking to see if your system supports struct dirent64..." >&4 - set d_dirent64s dirent64 d_off $i_dirent dirent.h + set d_dirent64_s dirent64 d_off $i_dirent dirent.h eval $hasfield - case "$d_flock64s" in + case "$d_dirent64_s" in "$define") echo "Yup, it does." >&4 ;; *) echo "Nope, it doesn't." >&4 @@ -7095,7 +7231,7 @@ EOCP else val="$undef" - for xxx in d_fstat64 d_ftruncate64 d_lockf64 d_lseek64 d_lstat64 d_open64 d_opendir64 d_readdir64 d_seekdir64 d_stat64 d_telldir64 d_truncate64 d_off64t d_ino64t d_flock64s d_dirent64s + for xxx in d_fstat64 d_ftruncate64 d_lockf64 d_lseek64 d_lstat64 d_open64 d_opendir64 d_readdir64 d_seekdir64 d_stat64 d_telldir64 d_truncate64 d_off64t d_ino64t d_flock64_s d_dirent64_s do set $xxx eval $setvar @@ -7513,69 +7649,6 @@ eval $inlibc set fcntl d_fcntl eval $inlibc -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 - : see if sys/select.h has to be included set sys/select.h i_sysselct eval $inhdr @@ -8735,6 +8808,10 @@ eval $inlibc set readlink d_readlink eval $inlibc +: see if readv exists +set readv d_readv +eval $inlibc + : see if rename exists set rename d_rename eval $inlibc @@ -9989,6 +10066,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' @@ -10384,6 +10465,7 @@ $rm -f try.* .out : How can we generate normalized random numbers ? echo " " +echo "Looking for a random number function..." >&4 case "$randfunc" in '') if set drand48 val -f; eval $csym; $val; then @@ -10426,7 +10508,7 @@ while $test "$cont"; do cont='' else dflt=n - rp="Function $ans does not exists. Use that name anyway?" + rp="Function $ans does not exist. Use that name anyway?" . ./myread dflt=rand case "$ans" in @@ -12296,6 +12378,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' @@ -12305,7 +12388,7 @@ d_dbmclose64='$d_dbmclose64' d_dbminit64='$d_dbminit64' d_delete64='$d_delete64' d_difftime='$d_difftime' -d_dirent64s='$d_dirent64s' +d_dirent64_s='$d_dirent64_s' d_dirnamlen='$d_dirnamlen' d_dlerror='$d_dlerror' d_dlopen='$d_dlopen' @@ -12333,7 +12416,7 @@ d_fgetpos64='$d_fgetpos64' d_fgetpos='$d_fgetpos' d_firstkey64='$d_firstkey64' d_flexfnam='$d_flexfnam' -d_flock64s='$d_flock64s' +d_flock64_s='$d_flock64_s' d_flock='$d_flock' d_fopen64='$d_fopen64' d_fork='$d_fork' @@ -12384,6 +12467,7 @@ d_index='$d_index' d_inetaton='$d_inetaton' d_ino64t='$d_ino64t' d_int64t='$d_int64t' +d_iovec_s='$d_iovec_s' d_isascii='$d_isascii' d_killpg='$d_killpg' d_lchown='$d_lchown' @@ -12407,8 +12491,14 @@ d_mkdir='$d_mkdir' d_mkfifo='$d_mkfifo' d_mktime='$d_mktime' d_msg='$d_msg' +d_msg_ctrunc='$d_msg_ctrunc' +d_msg_dontroute='$d_msg_dontroute' +d_msg_oob='$d_msg_oob' +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_mymalloc='$d_mymalloc' @@ -12439,6 +12529,8 @@ d_pwquota='$d_pwquota' d_readdir64='$d_readdir64' 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' @@ -12446,6 +12538,7 @@ d_safebcpy='$d_safebcpy' d_safemcpy='$d_safemcpy' d_sanemcmp='$d_sanemcmp' d_sched_yield='$d_sched_yield' +d_scm_rights='$d_scm_rights' d_seekdir64='$d_seekdir64' d_seekdir='$d_seekdir' d_select='$d_select' @@ -12455,6 +12548,7 @@ 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' @@ -12535,6 +12629,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' @@ -12621,6 +12716,7 @@ i_systime='$i_systime' i_systimek='$i_systimek' i_systimes='$i_systimes' i_systypes='$i_systypes' +i_sysuio='$i_sysuio' i_sysun='$i_sysun' i_syswait='$i_syswait' i_termio='$i_termio' diff --git a/Porting/Glossary b/Porting/Glossary index d19328c..8159c04 100644 --- a/Porting/Glossary +++ b/Porting/Glossary @@ -329,6 +329,10 @@ d_closedir (d_closedir.U): This variable conditionally defines HAS_CLOSEDIR if closedir() is available. +d_cmsghdr_s (d_socket.U): + This variable conditionally defines the HAS_STRUCT_CMSGHDR symbol, + which indicates that the 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 @@ -369,7 +373,7 @@ d_difftime (d_difftime.U): This variable conditionally defines the HAS_DIFFTIME symbol, which indicates to the C program that the difftime() routine is available. -d_dirent64s (io64.U): +d_dirent64_s (io64.U): This symbol will be defined if the C compiler supports struct dirent64. d_dirnamlen (i_dirent.U): @@ -493,7 +497,7 @@ d_flexfnam (d_flexfnam.U): This variable conditionally defines the FLEXFILENAMES symbol, which indicates that the system supports filenames longer than 14 characters. -d_flock64s (io64.U): +d_flock64_s (io64.U): This symbol will be defined if the C compiler supports struct flock64. d_flock (d_flock.U): @@ -735,6 +739,10 @@ d_ino64t (io64.U): d_int64t (i_inttypes.U): This symbol will be defined if the C compiler supports int64_t. +d_iovec_s (i_sysuio.U): + This variable conditionally defines the HAS_STRUCT_IOVEC symbol, + which indicates that the struct iovec is supported. + d_isascii (d_isascii.U): This variable conditionally defines the HAS_ISASCII constant, which indicates to the C program that isascii() is available. @@ -837,6 +845,31 @@ d_msg (d_msg.U): This variable conditionally defines the HAS_MSG symbol, which indicates that the entire msg*(2) library is present. +d_msg_ctrunc (d_socket.U): + This variable conditionally defines the HAS_MSG_CTRUNC symbol, + which indicates that the MSG_CTRUNC is available. #ifdef is + not enough because it may be an enum, glibc has been known to do this. + +d_msg_dontroute (d_socket.U): + This variable conditionally defines the HAS_MSG_DONTROUTE symbol, + which indicates that the MSG_DONTROUTE is available. #ifdef is + not enough because it may be an enum, glibc has been known to do this. + +d_msg_oob (d_socket.U): + This variable conditionally defines the HAS_MSG_OOB symbol, + which indicates that the MSG_OOB is available. #ifdef is + not enough because it may be an enum, glibc has been known to do this. + +d_msg_peek (d_socket.U): + This variable conditionally defines the HAS_MSG_PEEK symbol, + which indicates that the MSG_PEEK is available. #ifdef is + not enough because it may be an enum, glibc has been known to do this. + +d_msg_proxy (d_socket.U): + This variable conditionally defines the HAS_MSG_PROXY symbol, + which indicates that the MSG_PROXY is available. #ifdef is + not enough because it may be an enum, glibc has been known to do this. + d_msgctl (d_msgctl.U): This variable conditionally defines the HAS_MSGCTL symbol, which indicates to the C program that the msgctl() routine is available. @@ -845,6 +878,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_socket.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. @@ -977,6 +1014,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_socket.U): + This variable conditionally defines the HAS_RECVMSG symbol, + which indicates that the recvmsg is supported. + 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 @@ -1008,6 +1053,11 @@ d_sched_yield (d_pthread_y.U): symbol if the sched_yield routine is available to yield the execution of the current thread. +d_scm_rights (d_socket.U): + This variable conditionally defines the HAS_SCM_RIGHTS symbol, + which indicates that the SCM_RIGHTS is available. #ifdef is + not enough because it may be an enum, glibc has been known to do this. + d_seekdir64 (io64.U): This variable conditionally defines the HAS_SEEKDIR64 symbol, which indicates to the C program that the seekdir64() routine is available. @@ -1045,6 +1095,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_socket.U): + This variable conditionally defines the HAS_SENDMSG symbol, + which indicates that the sendmsg is supported. + 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 @@ -1406,6 +1460,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. @@ -1796,6 +1854,10 @@ i_systypes (i_systypes.U): This variable conditionally defines the I_SYS_TYPES symbol, and indicates whether a C program should include . +i_sysuio (i_sysuio.U): + This variable conditionally defines the I_SYSUIO symbol, and indicates + whether a C program should include . + i_sysun (i_sysun.U): This variable conditionally defines I_SYS_UN, which indicates to the C program that it should include to get UNIX diff --git a/Porting/config.sh b/Porting/config.sh index 25c25cf..dda3c3a 100644 --- a/Porting/config.sh +++ b/Porting/config.sh @@ -8,7 +8,7 @@ # Package name : perl5 # Source directory : . -# Configuration time: Thu Nov 5 12:26:24 EET 1998 +# Configuration time: Sun Nov 22 19:19:34 EET 1998 # Configured by : jhi # Target system : osf1 alpha.hut.fi v4.0 878 alpha @@ -54,7 +54,7 @@ ccdlflags=' ' ccflags='-pthread -std -D__LANGUAGE_C__' cf_by='jhi' cf_email='yourname@yourhost.yourplace.com' -cf_time='Thu Nov 5 12:26:24 EET 1998' +cf_time='Sun Nov 22 19:19:34 EET 1998' chgrp='' chmod='' chown='' @@ -92,6 +92,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' @@ -101,7 +102,7 @@ d_dbmclose64='undef' d_dbminit64='undef' d_delete64='undef' d_difftime='define' -d_dirent64s='undef' +d_dirent64_s='undef' d_dirnamlen='define' d_dlerror='define' d_dlopen='define' @@ -129,7 +130,7 @@ d_fgetpos64='undef' d_fgetpos='define' d_firstkey64='undef' d_flexfnam='define' -d_flock64s='undef' +d_flock64_s='undef' d_flock='define' d_fopen64='undef' d_fork='define' @@ -180,6 +181,7 @@ d_index='undef' d_inetaton='define' d_ino64t='undef' d_int64t='undef' +d_iovec_s='define' d_isascii='define' d_killpg='define' d_lchown='define' @@ -203,8 +205,14 @@ d_mkdir='define' d_mkfifo='define' d_mktime='define' d_msg='define' +d_msg_ctrunc='define' +d_msg_dontroute='define' +d_msg_oob='define' +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_mymalloc='undef' @@ -235,6 +243,8 @@ d_pwquota='define' d_readdir64='undef' d_readdir='define' d_readlink='define' +d_readv='define' +d_recvmsg='define' d_rename='define' d_rewinddir='define' d_rmdir='define' @@ -242,6 +252,7 @@ d_safebcpy='define' d_safemcpy='undef' d_sanemcmp='define' d_sched_yield='define' +d_scm_rights='define' d_seekdir64='undef' d_seekdir='define' d_select='define' @@ -251,6 +262,7 @@ 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' @@ -331,6 +343,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' @@ -417,6 +430,7 @@ i_systime='define' i_systimek='undef' i_systimes='define' i_systypes='define' +i_sysuio='define' i_sysun='define' i_syswait='define' i_termio='undef' diff --git a/Porting/config_H b/Porting/config_H index 97b5300..9fa28d8 100644 --- a/Porting/config_H +++ b/Porting/config_H @@ -17,7 +17,7 @@ /* * Package name : perl5 * Source directory : . - * Configuration time: Thu Nov 5 13:03:49 EET 1998 + * Configuration time: Sun Nov 22 19:19:34 EET 1998 * Configured by : jhi * Target system : osf1 alpha.hut.fi v4.0 878 alpha */ @@ -1717,8 +1717,68 @@ * This symbol, if defined, indicates that the BSD socketpair() call is * supported. */ -#define HAS_SOCKET /**/ -#define HAS_SOCKETPAIR /**/ +/* HAS_MSG_CTRUNC: + * This symbol, if defined, indicates that the MSG_CTRUNC is supported. + * Checking just with #ifdef might not be enough because this symbol + * has been known to be an enum. + */ +/* HAS_MSG_DONTROUTE: + * This symbol, if defined, indicates that the MSG_DONTROUTE is supported. + * Checking just with #ifdef might not be enough because this symbol + * has been known to be an enum. + */ +/* HAS_MSG_OOB: + * This symbol, if defined, indicates that the MSG_OOB is supported. + * Checking just with #ifdef might not be enough because this symbol + * has been known to be an enum. + */ +/* HAS_MSG_PEEK: + * This symbol, if defined, indicates that the MSG_PEEK is supported. + * Checking just with #ifdef might not be enough because this symbol + * has been known to be an enum. + */ +/* HAS_MSG_PROXY: + * This symbol, if defined, indicates that the MSG_PROXY is supported. + * Checking just with #ifdef might not be enough because this symbol + * has been known to be an enum. + */ +/* HAS_SCM_RIGHTS: + * This symbol, if defined, indicates that the SCM_RIGHTS is supported. + * Checking just with #ifdef might not be enough because this symbol + * has been known to be an enum. + */ +/* HAS_SENDMSG: + * This symbol, if defined, indicates that the sendmsg is supported + * to send messages between sockets. You will also need struct + * iovec from , HAS_STRUCT_IOVEC and I_SYSUIO. + */ +/* HAS_RECVMSG: + * This symbol, if defined, indicates that the recvmsg is supported + * to send messages between sockets. You will also need struct + * iovec from , HAS_STRUCT_IOVEC and I_SYSUIO. + */ +/* HAS_STRUCT_MSGHDR: + * This symbol, if defined, indicates that the struct msghdr + * (BSD 4.3 or 4.4) is supported. You will also need struct + * iovec from , HAS_STRUCT_IOVEC and I_SYSUIO. + */ +/* HAS_STRUCT_CMSGHDR: + * This symbol, if defined, indicates that the struct cmsghdr + * (BSD 4.4) is supported. You will also need struct + * iovec from , HAS_STRUCT_IOVEC and I_SYSUIO. + */ +#define HAS_SOCKET /**/ +#define HAS_SOCKETPAIR /**/ +#define HAS_MSG_CTRUNC /**/ +#define HAS_MSG_DONTROUTE /**/ +#define HAS_MSG_OOB /**/ +#define HAS_MSG_PEEK /**/ +/*#define HAS_MSG_PROXY / **/ +#define HAS_SCM_RIGHTS /**/ +#define HAS_SENDMSG /**/ +#define HAS_RECVMSG /**/ +#define HAS_STRUCT_MSGHDR /**/ +#define HAS_STRUCT_CMSGHDR /**/ /* USE_STAT_BLOCKS: * This symbol is defined if this system has a stat structure declaring @@ -1851,6 +1911,12 @@ #define PWGECOS /**/ #define PWPASSWD /**/ +/* I_SYSUIO: + * This symbol, if defined, indicates that exists and + * should be included. + */ +#define I_SYSUIO /**/ + /* Free_t: * This variable contains the return type of free(). It is usually * void, but occasionally int. @@ -1958,12 +2024,25 @@ */ /*#define HAS_FTELLO / **/ +/* HAS_READV: + * This symbol, if defined, indicates that the readv routine is + * available to do gather reads. You will also need + * and there I_SYSUIO. + */ +#define HAS_READV /**/ + /* USE_SFIO: * This symbol, if defined, indicates that sfio should * be used. */ /*#define USE_SFIO / **/ +/* HAS_WRITEV: + * This symbol, if defined, indicates that the writev routine is + * available to do scatter writes. + */ +#define HAS_WRITEV /**/ + /* HAS_DBMINIT64: * This symbol, if defined, indicates that the dbminit64 routine is * available to open dbm files larger than 2 gigabytes. diff --git a/config_h.SH b/config_h.SH index f84775a..b70bf26 100644 --- a/config_h.SH +++ b/config_h.SH @@ -1731,8 +1731,68 @@ sed <config.h -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un- * This symbol, if defined, indicates that the BSD socketpair() call is * supported. */ -#$d_socket HAS_SOCKET /**/ -#$d_sockpair HAS_SOCKETPAIR /**/ +/* HAS_MSG_CTRUNC: + * This symbol, if defined, indicates that the MSG_CTRUNC is supported. + * Checking just with #ifdef might not be enough because this symbol + * has been known to be an enum. + */ +/* HAS_MSG_DONTROUTE: + * This symbol, if defined, indicates that the MSG_DONTROUTE is supported. + * Checking just with #ifdef might not be enough because this symbol + * has been known to be an enum. + */ +/* HAS_MSG_OOB: + * This symbol, if defined, indicates that the MSG_OOB is supported. + * Checking just with #ifdef might not be enough because this symbol + * has been known to be an enum. + */ +/* HAS_MSG_PEEK: + * This symbol, if defined, indicates that the MSG_PEEK is supported. + * Checking just with #ifdef might not be enough because this symbol + * has been known to be an enum. + */ +/* HAS_MSG_PROXY: + * This symbol, if defined, indicates that the MSG_PROXY is supported. + * Checking just with #ifdef might not be enough because this symbol + * has been known to be an enum. + */ +/* HAS_SCM_RIGHTS: + * This symbol, if defined, indicates that the SCM_RIGHTS is supported. + * Checking just with #ifdef might not be enough because this symbol + * has been known to be an enum. + */ +/* HAS_SENDMSG: + * This symbol, if defined, indicates that the sendmsg is supported + * to send messages between sockets. You will also need struct + * iovec from , HAS_STRUCT_IOVEC and I_SYSUIO. + */ +/* HAS_RECVMSG: + * This symbol, if defined, indicates that the recvmsg is supported + * to send messages between sockets. You will also need struct + * iovec from , HAS_STRUCT_IOVEC and I_SYSUIO. + */ +/* HAS_STRUCT_MSGHDR: + * This symbol, if defined, indicates that the struct msghdr + * (BSD 4.3 or 4.4) is supported. You will also need struct + * iovec from , HAS_STRUCT_IOVEC and I_SYSUIO. + */ +/* HAS_STRUCT_CMSGHDR: + * This symbol, if defined, indicates that the struct cmsghdr + * (BSD 4.4) is supported. You will also need struct + * iovec from , HAS_STRUCT_IOVEC and I_SYSUIO. + */ +#$d_socket HAS_SOCKET /**/ +#$d_sockpair HAS_SOCKETPAIR /**/ +#$d_msg_ctrunc HAS_MSG_CTRUNC /**/ +#$d_msg_dontroute HAS_MSG_DONTROUTE /**/ +#$d_msg_oob HAS_MSG_OOB /**/ +#$d_msg_peek HAS_MSG_PEEK /**/ +#$d_msg_proxy HAS_MSG_PROXY /**/ +#$d_scm_rights HAS_SCM_RIGHTS /**/ +#$d_sendmsg HAS_SENDMSG /**/ +#$d_recvmsg HAS_RECVMSG /**/ +#$d_msghdr_s HAS_STRUCT_MSGHDR /**/ +#$d_cmsghdr_s HAS_STRUCT_CMSGHDR /**/ /* USE_STAT_BLOCKS: * This symbol is defined if this system has a stat structure declaring @@ -1865,6 +1925,12 @@ sed <config.h -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un- #$d_pwgecos PWGECOS /**/ #$d_pwpasswd PWPASSWD /**/ +/* I_SYSUIO: + * This symbol, if defined, indicates that exists and + * should be included. + */ +#$i_sysuio I_SYSUIO /**/ + /* Free_t: * This variable contains the return type of free(). It is usually * void, but occasionally int. @@ -1972,12 +2038,25 @@ sed <config.h -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un- */ #$d_ftello HAS_FTELLO /**/ +/* HAS_READV: + * This symbol, if defined, indicates that the readv routine is + * available to do gather reads. You will also need + * and there I_SYSUIO. + */ +#$d_readv HAS_READV /**/ + /* USE_SFIO: * This symbol, if defined, indicates that sfio should * be used. */ #$d_sfio USE_SFIO /**/ +/* HAS_WRITEV: + * This symbol, if defined, indicates that the writev routine is + * available to do scatter writes. + */ +#$d_writev HAS_WRITEV /**/ + /* HAS_DBMINIT64: * This symbol, if defined, indicates that the dbminit64 routine is * available to open dbm files larger than 2 gigabytes. @@ -2107,7 +2186,7 @@ sed <config.h -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un- #$d_telldir64 HAS_TELLDIR64 /**/ #$d_truncate64 HAS_TRUNCATE64 /**/ #$d_off64t HAS_OFF64_T /**/ -#$d_dirent64s HAS_STRUCT_DIRENT64 /**/ +#$d_dirent64_s HAS_STRUCT_DIRENT64 /**/ /* PRIVLIB: * This symbol contains the name of the private library for this package. diff --git a/ext/Socket/Socket.pm b/ext/Socket/Socket.pm index 5a4870f..1ed19f7 100644 --- a/ext/Socket/Socket.pm +++ b/ext/Socket/Socket.pm @@ -193,10 +193,25 @@ require DynaLoader; AF_UNIX AF_UNSPEC AF_X25 + MSG_CTLFLAGS + MSG_CTLIGNORE + MSG_CTRUNC MSG_DONTROUTE + MSG_DONTWAIT + MSG_EOF + MSG_EOR + MSG_ERRQUEUE + MSG_FIN MSG_MAXIOVLEN + MSG_NOSIGNAL MSG_OOB MSG_PEEK + MSG_PROXY + MSG_RST + MSG_SYN + MSG_TRUNC + MSG_URG + MSG_WAITALL PF_802 PF_APPLETALK PF_CCITT @@ -221,6 +236,11 @@ require DynaLoader; PF_UNIX PF_UNSPEC PF_X25 + SCM_CONNECT + SCM_CREDENTIALS + SCM_CREDS + SCM_RIGHTS + SCM_TIMESTAMP SOCK_DGRAM SOCK_RAW SOCK_RDM diff --git a/ext/Socket/Socket.xs b/ext/Socket/Socket.xs index de0217b..f0ba57f 100644 --- a/ext/Socket/Socket.xs +++ b/ext/Socket/Socket.xs @@ -330,42 +330,114 @@ constant(char *name, int arg) case 'L': break; case 'M': + if (strEQ(name, "MSG_CTLFLAGS")) +#ifdef MSG_CTLFLAGS + return MSG_CTLFLAGS; +#else + goto not_there; +#endif + if (strEQ(name, "MSG_CTLIGNORE")) +#ifdef MSG_CTLIGNORE + return MSG_CTLIGNORE; +#else + goto not_there; +#endif if (strEQ(name, "MSG_CTRUNC")) -#if defined(MSG_CTRUNC) || defined(HAS_GNULIBC) /* XXX it's an enum */ +#ifdef HAS_MSG_CTRUNC /* might be an enum */ return MSG_CTRUNC; #else goto not_there; #endif if (strEQ(name, "MSG_DONTROUTE")) -#if defined(MSG_DONTROUTE) || defined(HAS_GNULIBC) /* XXX it's an enum */ +#ifdef HAS_MSG_DONTROUTE /* might be an enum */ return MSG_DONTROUTE; #else goto not_there; #endif + if (strEQ(name, "MSG_DONTWAIT")) +#ifdef MSG_DONTWAIT + return MSG_DONTWAIT; +#else + goto not_there; +#endif + if (strEQ(name, "MSG_EOF")) +#ifdef MSG_EOF + return MSG_EOF; +#else + goto not_there; +#endif + if (strEQ(name, "MSG_EOR")) +#ifdef MSG_EOR + return MSG_EOR; +#else + goto not_there; +#endif + if (strEQ(name, "MSG_ERRQUEUE")) +#ifdef MSG_ERRQUEUE + return MSG_ERRQUEUE; +#else + goto not_there; +#endif + if (strEQ(name, "MSG_FIN")) +#ifdef MSG_FIN + return MSG_FIN; +#else + goto not_there; +#endif if (strEQ(name, "MSG_MAXIOVLEN")) -#ifdef MSG_MAXIOVLEN +#ifdef MSG_MAXIOVLEN /* might be an enum */ return MSG_MAXIOVLEN; #else goto not_there; #endif + if (strEQ(name, "MSG_NOSIGNAL")) +#ifdef MSG_NOSIGNAL + return MSG_NOSIGNAL; +#else + goto not_there; +#endif if (strEQ(name, "MSG_OOB")) -#if defined(MSG_OOB) || defined(HAS_GNULIBC) /* XXX it's an enum */ +#ifdef HAS_MSG_OOB /* might be an enum */ return MSG_OOB; #else goto not_there; #endif if (strEQ(name, "MSG_PEEK")) -#if defined(MSG_PEEK) || defined(HAS_GNULIBC) /* XXX it's an enum */ +#ifdef HAS_MSG_PEEK /* might be an enum */ return MSG_PEEK; #else goto not_there; #endif if (strEQ(name, "MSG_PROXY")) -#if defined(MSG_PROXY) || defined(HAS_GNULIBC) /* XXX it's an enum */ +#ifdef HAS_MSG_PROXY /* might be an enum */ return MSG_PROXY; #else goto not_there; #endif + if (strEQ(name, "MSG_RST")) +#ifdef MSG_RST + return MSG_RST; +#else + goto not_there; +#endif + if (strEQ(name, "MSG_SYN")) +#ifdef MSG_SYN + return MSG_SYN; +#else + goto not_there; +#endif + if (strEQ(name, "MSG_TRUNC")) +#ifdef MSG_TRUNC + return MSG_TRUNC; +#else + goto not_there; +#endif + if (strEQ(name, "MSG_WAITALL")) +#ifdef MSG_WAITALL + return MSG_WAITALL; +#else + goto not_there; +#endif break; case 'N': break; @@ -522,6 +594,36 @@ constant(char *name, int arg) case 'R': break; case 'S': + if (strEQ(name, "SCM_CONNECT")) +#ifdef SCM_CONNECT + return SCM_CONNECT; +#else + goto not_there; +#endif + if (strEQ(name, "SCM_CREDENTIALS")) +#ifdef SCM_CREDENTIALS + return SCM_CREDENTIALSS; +#else + goto not_there; +#endif + if (strEQ(name, "SCM_CREDS")) +#ifdef SCM_CREDS + return SCM_CREDS; +#else + goto not_there; +#endif + if (strEQ(name, "SCM_RIGHTS")) +#ifdef HAS_SCM_RIGHTS /* might be an enum */ + return SCM_RIGHTS; +#else + goto not_there; +#endif + if (strEQ(name, "SCM_TIMESTAMP")) +#ifdef SCM_TIMESTAMP + return SCM_TIMESTAMP; +#else + goto not_there; +#endif if (strEQ(name, "SOCK_DGRAM")) #ifdef SOCK_DGRAM return SOCK_DGRAM; diff --git a/iperlsys.h b/iperlsys.h index 91389a2..6cb3206 100644 --- a/iperlsys.h +++ b/iperlsys.h @@ -926,5 +926,22 @@ public: #endif /* PERL_OBJECT */ +/* Mention + + HAS_READV + HAS_RECVMSG + HAS_SENDMSG + HAS_WRITEV + HAS_STRUCT_MSGHDR + HAS_STRUCT_CMSGHDR + I_SYSUIO + + here so that Configure picks them up. Perl core does not + use them but somebody might want to extend IO:: someday. + + Jarkko Hietaniemi November 1998 + + */ + #endif /* __Inc__IPerl___ */