Front page | perl.vmsperl |
Postings from May 2002
an initial pass at building with a link to Multinet
From:
PPrymmer
Date:
May 23, 2002 18:30
Subject:
an initial pass at building with a link to Multinet
Message ID:
OFC9BA5807.3D52C04A-ON85256BC3.00065325@55.25.11
Greetings,
I wanted to give a progress report on the state of the patch.
It can now build, link, and test most of perl@16735, and the
lib/Net/hostent.t tests all pass. The patch affects files:
configure.com - add new Has_multinet and usemultinet
variables. Do multinet tests and do not configure the build
if the gethostbyaddr() does not return a hostent->h_length
of 4. Some other clean up to partially appease Charlie
Hammond's DCL_CHECK V2.1 was also carried out.
Also noteworthy: the perl_setup.com procedure is
created with STMLF record format rather than VFC
so as to make it easier to be manipulated by (poorly)
ported editors such as vile, or old emacs'.
vms/descrip_mms.template - opt file fiddling
vms/genopt.com - two ! make dcl_check happy
vms/sockadapt.h - multinet includes to get gethostby* working.
vms/gen_shrfls.pl - shuffle opt files (trickier than it first sounds -
problem with Link lines in descrip.mms perhaps?)
In order to request a build to attempt to link against
the Multinet sharable image you have to configure with:
@configure "-Dusemultinet"
and in addition the headers and sharable libs must be
present and the gethostbyaddr() must return an address
of length 4. It should hence be safe to run "-Dusemultinet"
even on a non-Multinet machine.
That was the "good" news. The bad news is that without
the patch I get two test failures:
lib/ExtUtils/t/Command..............FAILED at test 3
lib/Net/hostent.....................FAILED at test 5
Failed 2 test scripts out of 626, 99.68% okay.
But with the patch applied as is I obtain:
t/op/lex_assign.....................FAILED at test 105
ext/IO/lib/IO/t/io_udp..............FAILED at test 1
ext/Socket/Socket...................FAILED at test 1
lib/ExtUtils/t/Command..............FAILED at test 3
lib/Net/Ping/t/120_udp_inst.........FAILED at test 2
Failed 5 test scripts out of 626, 99.20% okay.
Which clearly indicates need for further work.
Another thing I do not like about these changes to
configure.com is that they switch the socket lib
rather late in the section of test compiles. Hence
many socket related include and function probe
tests get carried out against the DEC C versions
not against the Multinet equivalents (hence there
could be trouble in the config.sh and config.h).
Also not addressed is the Berkeley db.h and
db_version stuff. I.e.:
$ sea config.h "$db"
#define DB_VERSION_MAJOR_CFG $db_version_major /**/
#define DB_VERSION_MINOR_CFG $db_version_minor /**/
#define DB_VERSION_PATCH_CFG $db_version_patch /**/
At any rate here is what it looks like thus
far, comments welcome:
diff -ru perl_16735/README.vms perl/README.vms
--- perl_16735/README.vms Tue May 21 19:21:00 2002
+++ perl/README.vms Thu May 23 10:47:13 2002
@@ -244,12 +244,15 @@
UDP sockets when used with Multinet, though, so you should be aware of
that.
-The other solution available is to use the socket routines built into DEC
-C. Which routines are available depend on the version of VMS you're
-running, and require proper UCX emulation by your TCP/IP vendor.
-Relatively current versions of Multinet, TCPWare, Pathway, and UCX all
-provide the required libraries--check your manuals or release notes to see
-if your version is new enough.
+The other solutions available would be to use either the socket routines
+built into DEC C or the Multinet socket routines. Which routines are
+available depend on the version of VMS you're running, and require proper
+UCX emulation by your TCP/IP vendor. Relatively current versions of TCPWare,
+Pathway, and UCX all provide the required libraries--check your manuals or
+release notes to see if your version is new enough. If you are running
+Multinet as your TCP/IP stack you may either build perl with the DEC C
+socket routines (this is the default) or with the Multinet socket
+routines (this is only available as an option to the build).
=head1 Building Perl
@@ -549,6 +552,26 @@
Please note that in later versions "DEC C" may also be known as
"Compaq C".
+
+=head2 Multinet issues with Perl on VMS
+
+When building with C RTL sockets and a Multinet TCP/IP stack the C calls
+to gethostbyaddr() and gethostbyname() return hostent structs with h_length
+memebers that are too large. This problem has been seen with the following
+combinations of C RTL and Multinet products: DEC C 6.0-001, or Compaq C
+6.5-001 and Multinet 4.3 Rev A-X; or with: DEC C 5.2-003 and Multinet
+4.2 Rev A-X. Use the command:
+
+ multinet show /version
+
+to determine your version of Multinet. A possible workaround to test
+failures in "ext/Socket/Socket" and in "lib/Net/hostent" is available to
+you by re-configuring the build with:
+
+ @configure "-Dusemultinet"
+
+But that workaround may not work for all versions of Multinet (and it
+may not be necessary for some).
=head2 GNU issues with Perl on VMS
diff -ru perl_16735/configure.com perl/configure.com
--- perl_16735/configure.com Tue May 21 19:21:02 2002
+++ perl/configure.com Thu May 23 10:47:06 2002
@@ -2146,6 +2146,7 @@
$!: get list of predefined functions in a handy place
$!: see if we have sigaction or sigprocmask
$!: see whether socketshr exists
+$ Has_multinet := F
$ IF (F$SEARCH(F$PARSE("SocketShr","Sys$Share:.Exe")).NES."")
$ THEN
$ Has_socketshr = "T"
@@ -2154,12 +2155,40 @@
$ ELSE
$ Has_socketshr = "F"
$ ENDIF
-$ IF (ccname .EQS. "DEC" .AND. Dec_C_Version .GE. 50200000) .OR. -
- (ccname .EQS. "CXX")
+$ IF (ccname .EQS. "DEC" .AND. Dec_C_Version .GE. 50200000) .OR. (ccname .EQS. "CXX")
$ THEN
$ Has_Dec_C_Sockets = "T"
$ echo ""
$ echo4 "Hmm... Looks like you have Dec C Berkeley networking support."
+$ IF F$TYPE(usemultinet) .eqs. "STRING"
+$ THEN
+$ IF usemultinet .OR. usemultinet .EQS. "define"
+$ THEN
+$ IF F$SEARCH(F$PARSE("MULTINET_SOCKET_LIBRARY","MULTINET:.Exe")) .NES."" .AND. -
+ F$SEARCH(F$PARSE("TYPES","multinet_root:[multinet.include.sys].H")) .NES."" .AND. -
+ F$SEARCH(F$PARSE("SOCKET","multinet_root:[multinet.include.sys].H")) .NES."" .AND. -
+ F$SEARCH(F$PARSE("IN","multinet_root:[multinet.include.netinet].H")) .NES."" .AND. -
+ F$SEARCH(F$PARSE("INET","multinet_root:[multinet.include.arpa].H")) .NES."" .AND. -
+ F$SEARCH(F$PARSE("NETDB","multinet_root:[multinet.include].H")) .NES.""
+$ THEN
+$ echo "Checking for Multinet"
+$ OPEN/WRITE CONFIG multinetvers.lis
+$ DEFINE/USER_MODE SYS$ERROR CONFIG
+$ DEFINE/USER_MODE SYS$OUTPUT CONFIG
+$ MULTINET SHOW /version
+$ tmp = $severity
+$ IF (silent) THEN GOSUB Shut_up
+$ CLOSE CONFIG
+$ DELETE/NOLOG/NOCONFIRM multinetvers.lis;
+$ IF tmp .EQ. 1
+$ THEN
+$ echo4 "Hmm... Looks like you have Multinet Berkeley networking support."
+$ Has_multinet := T
+$ ELSE
+$ echo4 "Multinet may have been installed but does not appear to be working."
+$ ENDIF
+$ ENDIF
+$ ENDIF
$ ELSE
$ Has_Dec_C_Sockets = "F"
$ ENDIF
@@ -2171,20 +2200,30 @@
$ echo "build into Perl?"
$ IF Has_Dec_C_Sockets
$ THEN
-$ dflt = "DECC"
-$ else
+$ IF Has_multinet
+$ THEN dflt = "MULTINET"
+$ ELSE dflt = "DECC"
+$ ENDIF
+$ ELSE
$ dflt = "SOCKETSHR"
-$ endif
+$ ENDIF
$ rp = "Choose socket stack (NONE"
$ IF Has_socketshr THEN rp = rp + ",SOCKETSHR"
$ IF Has_Dec_C_Sockets THEN rp = rp + ",DECC"
+$ IF Has_multinet THEN rp = rp + ",MULTINET"
$ rp = rp + ") [''dflt'] "
$ GOSUB myread
$ Has_Dec_C_Sockets = "F"
$ Has_socketshr = "F"
+$ Has_multinet := F
$ ans = F$EDIT(ans,"TRIM,COMPRESS,LOWERCASE")
-$ IF ans.eqs."decc" then Has_Dec_C_Sockets = "T"
-$ IF ans.eqs."socketshr" then Has_socketshr = "T"
+$ IF ans .EQS. "multinet"
+$ THEN
+$ Has_multinet := T
+$ Has_Dec_C_Sockets := T
+$ ENDIF
+$ IF ans .EQS. "decc" THEN Has_Dec_C_Sockets = "T"
+$ IF ans .EQS. "socketshr" THEN Has_socketshr = "T"
$ ENDIF
$!
$!
@@ -2525,8 +2564,7 @@
$ line = F$ELEMENT(0," ",line)
$ line_len = F$LENGTH(line)
$ IF F$EXTRACT(line_len - 12,12,line) .NES. "/Makefile.PL" THEN goto ext_loop
-$ IF F$EXTRACT(0,4,line) .EQS. "ext/" THEN -
- xxx = F$EXTRACT(4,line_len - 16,line)
+$ IF F$EXTRACT(0,4,line) .EQS. "ext/" THEN xxx = F$EXTRACT(4,line_len - 16,line)
$ IF xxx .EQS. "DynaLoader" THEN goto ext_loop ! omit
$ IF xxx .EQS. "SDBM_File/sdbm" THEN goto ext_loop ! sub extension - omit
$ IF xxx .EQS. "Devel/PPPort/harness" THEN goto ext_loop ! sub extension - omit
@@ -2669,7 +2707,7 @@
$ ENDIF
$ ENDIF
$!
-$ DELETE/NOLOG Makefile.;
+$ DELETE/NOLOG/NOCONFIRM Makefile.;
$ GOTO Beyond_open
$Open_error:
$ TYPE SYS$INPUT:
@@ -4464,6 +4502,92 @@
$ d_socklen_t="undef"
$ ENDIF
$!
+$! Does gethostbyaddr() return a hostent->h_length of 4
+$! for an IPv4 address?
+$!
+$ IF Has_multinet .AND. i_netdb .EQS. "define"
+$ THEN
+$ echo4 "Checking to see if we need to define MULTINET_SOCKETS..."
+$ Previous_opt_need = Needs_opt
+$ IF F$SEARCH("[]try.opt") .NES. ""
+$ THEN open/append OPTCHAN []try.opt
+$ ELSE open/write OPTCHAN []try.opt
+$ ENDIF
+$ write OPTCHAN "MULTINET:MULTINET_SOCKET_LIBRARY.EXE/SHARE"
+$ Close OPTCHAN
+$ Needs_Opt := Y
+$ OS
+$ WS "#define MULTINET_SOCKETS /* must link against MULTINET:MULTINET_SOCKET_LIBRARY.EXE/SHARE */"
+$ WS "#ifdef MULTINET_SOCKETS
+$ WS "# include ""multinet_root:[multinet.include.sys]types.h"""
+$ WS "# include ""multinet_root:[multinet.include.sys]socket.h"""
+$ WS "# include ""multinet_root:[multinet.include.netinet]in.h"""
+$ WS "# include ""multinet_root:[multinet.include.arpa]inet.h"""
+$ WS "# include ""multinet_root:[multinet.include]netdb.h"""
+$ WS "#else /* the DEC/Compaq/HP C headers (UCX/TCPIP) */"
+$ WS "# include <socket.h>"
+$ WS "# include <inet.h>"
+$ WS "# include <in.h>"
+$ WS "# include <netdb.h>"
+$ WS "#endif"
+$ WS "#include <stdio.h>"
+$ WS "int main() { /* expected output: ""LOCALHOST 4\n"" */"
+$ WS " struct hostent *h;"
+$ WS " struct in_addr myaddr;"
+$ WS " myaddr.s_addr = inet_addr(""127.0.0.1"");"
+$ WS " h = gethostbyaddr( (char*) &myaddr, 4, AF_INET );"
+$ WS " if ( h != NULL ) {"
+$ WS " printf( ""%s %d\n"", h->h_name, h->h_length );"
+$ WS " }
+$ WS " else {
+$ WS " printf( ""(null)\n"" );"
+$ WS " }"
+$ WS " return(0);"
+$ WS "}"
+$ CS
+$ GOSUB link_ok
+$ IF link_status .NE. good_link
+$ THEN
+$ echo4 "Apparently not."
+$! Note "Has_multinet" now plays role more like "usemultinet"
+$ Has_multinet := F
+$ ELSE
+$ echo4 "Checking for gethostbyaddr() hostent h_length value..."
+$ GOSUB just_mcr_it
+$ tmp = F$ELEMENT(1," ",tmp)
+$ IF F$INTEGER(tmp) .EQ. 4
+$ THEN
+$ echo4 "h_length was ''tmp'."
+$!
+$! You must configure your build with "-Dusemultinet", or run interactively
+$! and answer "y" to the question in order to turn on
+$! #define MULTINET_SOCKETS, even if you do successfully get 4 as the
+$! h_length value.
+$!
+$ dflt = "n"
+$ IF F$TYPE(usemultinet) .eqs. "STRING"
+$ THEN
+$ IF usemultinet .OR. usemultinet .EQS. "define" THEN dflt = "y"
+$ ENDIF
+$ rp = "Build with MULTINET_SOCKETS? [''dflt'] "
+$ GOSUB myread
+$ IF ans
+$ THEN
+$ Has_multinet := T
+$ i_niin="undef"
+$ ELSE
+$ echo4 "Very well, we will not build with MULTINET_SOCKETS."
+$ Has_multinet := F
+$ ENDIF
+$ ELSE
+$ echo4 "Never mind, we will build with DECC_SOCKETS rather than MULTINET_SOCKETS."
+$ Has_multinet := F
+$ ENDIF
+$ ENDIF
+$ Needs_Opt = Previous_opt_need
+$ DELETE/SYMBOL Previous_opt_need
+$ ENDIF
+$!
$! Check for pthread_yield
$!
$ IF use_threads
@@ -4776,7 +4900,10 @@
$ d_getservprotos="define"
$ IF ccname .EQS. "DEC" .OR. ccname .EQS. "CXX"
$ THEN
-$ socksizetype="unsigned int"
+$ IF Has_multinet
+$ THEN socksizetype="int"
+$ ELSE socksizetype="unsigned int"
+$ ENDIF
$ ELSE
$ socksizetype="int *"
$ ENDIF
@@ -5760,6 +5887,7 @@
$ WC "uselargefiles='" + uselargefiles + "'"
$ WC "uselongdouble='" + uselongdouble + "'"
$ WC "usemorebits='" + usemorebits + "'"
+$ WC "usemultinet='" + Has_multinet + "'"
$ WC "usemultiplicity='" + usemultiplicity + "'"
$ WC "usemymalloc='" + usemymalloc + "'"
$ WC "useperlio='" + useperlio + "'"
@@ -5988,6 +6116,7 @@
$ THEN
$ WC "#define VMS_DO_SOCKETS"
$ WC "#define DECCRTL_SOCKETS"
+$ IF Has_multinet THEN WC "#define MULTINET_SOCKETS"
$ ELSE
$ IF Has_Socketshr THEN WC "#define VMS_DO_SOCKETS"
$ ENDIF
@@ -6049,7 +6178,10 @@
$ ENDIF
$ IF Has_Dec_C_Sockets
$ THEN
-$ SOCKET_REPLACE = "SOCKET=DECC_SOCKETS=1"
+$ IF Has_multinet
+$ THEN SOCKET_REPLACE = "SOCKET=MULTINET_SOCKETS=1"
+$ ELSE SOCKET_REPLACE = "SOCKET=DECC_SOCKETS=1"
+$ ENDIF
$ ELSE
$ IF Has_Socketshr
$ THEN
@@ -6283,7 +6415,18 @@
$ echo ""
$ echo4 "The perl_setup.com file is now being written..."
$ file_2_find = "[-]perl_setup.com"
-$ OPEN/WRITE CONFIG 'file_2_find'
+$!
+$! Folks are likely to want to edit perl_setup.com.
+$! STMLF RFM plays nicer with ported editors than does VFC.
+$!
+$ CREATE [-]CONFIG.FDL
+$ DECK
+RECORD
+ FORMAT STREAM_LF
+$ EOD
+$ CREATE /FDL=[-]CONFIG.FDL 'file_2_find'
+$ OPEN/APPEND CONFIG 'file_2_find'
+$ DELETE/NOLOG [-]CONFIG.FDL;
$ WRITE CONFIG "$!"
$ WRITE CONFIG "$! Perl_Setup.com ''cf_time'"
$ IF cf_email.NES.perladmin
diff -ru perl_16735/vms/descrip_mms.template perl/vms/descrip_mms.template
--- perl_16735/vms/descrip_mms.template Tue May 21 19:23:01 2002
+++ perl/vms/descrip_mms.template Thu May 23 10:47:28 2002
@@ -64,6 +64,10 @@
MALLOC_C = malloc$(C)
.endif
+.ifdef MULTINET_SOCKETS
+SOCKET=1
+.endif
+
.ifdef DECC_SOCKETS
SOCKET=1
.endif
@@ -73,6 +77,8 @@
.endif
# If they defined SOCKET but didn't choose a stack, default to SOCKETSHR
+.ifdef MULTINET_SOCKETS
+.else
.ifdef DECC_SOCKETS
.else
.ifdef SOCKETSHR_SOCKETS
@@ -82,6 +88,7 @@
.endif
.endif
.endif
+.endif
ARCHDIR = [.lib.$(ARCH).$(PERL_VERSION)]
@@ -158,6 +165,10 @@
#: By default, used SOCKETSHR library; see ReadMe.VMS
#: for information on changing socket support
.ifdef SOCKET
+.ifdef MULTINET_SOCKETS
+SOCKDEF = MULTINET_SOCKETS
+SOCKLIB = MULTINET:MULTINET_SOCKET_LIBRARY.EXE/SHARE
+.else
.ifdef DECC_SOCKETS
SOCKDEF =
SOCKLIB =
@@ -165,6 +176,7 @@
SOCKDEF =
SOCKLIB = SocketShr/Share
.endif
+.endif
# N.B. the targets for $(SOCKC) and $(SOCKH) assume that the permanent
# copies live in [.vms], and the `clean' target will delete copies of
# these files in the current default directory.
@@ -410,8 +422,13 @@
.ifdef __DEBUG__
# Link an extra perl that doesn't invoke the debugger
+.ifdef MULTINET_SOCKETS
+perl : $(DBG)perl$(E)
+ Link $(LINKFLAGS)/NoDebug/Trace/NoMap/NoCross/NoFull/Exe=N$(DBG)perl$(E) perlmain$(O), perlshr.opt/Option $(CRTLOPTS)
+.else
perl : $(DBG)perl$(E)
Link $(LINKFLAGS)/NoDebug/Trace/NoMap/NoCross/NoFull/Exe=N$(DBG)perl$(E) perlmain$(O), perlshr.opt/Option, perlshr_attr.opt/Option $(CRTLOPTS)
+.endif
.else
perl : $(DBG)perl$(E)
@ Continue
@@ -420,7 +437,14 @@
$(DBG)perl$(E) : perlmain$(O), $(DBG)perlshr$(E), $(MINIPERL_EXE)
@ @[.vms]genopt "PerlShr.Opt/Write" "|" "''F$Environment("Default")'$(DBG)PerlShr$(E)/Share"
.ifdef MT
+.ifdef MULTINET_SOCKETS
+ Link $(LINKFLAGS)/Exe=$(MMS$TARGET) perlmain$(O), perlshr.opt/Option $(CRTLOPTS)/THREAD=(MULTI,UPCALL)
+.else
Link $(LINKFLAGS)/Exe=$(MMS$TARGET) perlmain$(O), perlshr.opt/Option, perlshr_attr.opt/Option $(CRTLOPTS)/THREAD=(MULTI,UPCALL)
+.endif
+.else
+.ifdef MULTINET_SOCKETS
+ Link $(LINKFLAGS)/Exe=$(MMS$TARGET) perlmain$(O), perlshr.opt/Option $(CRTLOPTS)
.else
Link $(LINKFLAGS)/Exe=$(MMS$TARGET) perlmain$(O), perlshr.opt/Option, perlshr_attr.opt/Option $(CRTLOPTS)
.endif
diff -ru perl_16735/vms/gen_shrfls.pl perl/vms/gen_shrfls.pl
--- perl_16735/vms/gen_shrfls.pl Tue May 21 19:23:02 2002
+++ perl/vms/gen_shrfls.pl Thu May 23 10:48:14 2002
@@ -69,7 +69,7 @@
else { die "$0: Can't find perl.h\n"; }
$use_threads = $use_mymalloc = $case_about_case = $debugging_enabled = 0;
- $hide_mymalloc = $isgcc = $use_perlio = 0;
+ $hide_mymalloc = $isgcc = $use_perlio = $use_multinet = 0;
# Go see what is enabled in config.sh
$config = $dir . "config.sh";
@@ -82,6 +82,7 @@
$hide_mymalloc++ if /embedmymalloc='(define|yes|true|t|y|1)'/i;
$isgcc++ if /gccversion='[^']/;
$use_perlio++ if /useperlio='(define|yes|true|t|y|1)'/i;
+ $use_multinet++ if /usemultinet='(define|yes|true|t|y|1)'/i;
}
close CONFIG;
@@ -302,7 +303,12 @@
}
}
else {
- print OPTATTR "! No additional linker directives are needed when using DECC\n";
+ if ($use_multinet) {
+ print OPTATTR "MULTINET_COMMON_ROOT:[MULTINET]MULTINET_SOCKET_LIBRARY.EXE/SHARE\n";
+ }
+ else {
+ print OPTATTR "! No additional linker directives are needed when using DECC or CXX\n";
+ }
}
close OPTATTR;
@@ -366,7 +372,12 @@
print OPTBLD "$libperl/Include=($incstr)\n";
print OPTBLD "$libperl/Library\n";
open(RTLOPT,$rtlopt) or die "$0: Can't read options file $rtlopt: $!\n";
-while (<RTLOPT>) { print OPTBLD; }
+# The link of miniperl requires the presence of the multinet lib in crtl.opt.
+# The link of several extensions requires the presence of the multinet lib
+# the _attr options file. However, the link of perlshr uses both the
+# _bld and _attr options files. To link perlshr the multinet lib ought
+# to be listed in one only, hence the unless clause.
+while (<RTLOPT>) { print OPTBLD unless ($use_multinet && $_ =~ m/MULTINET/i); }
close RTLOPT;
close OPTBLD;
diff -ru perl_16735/vms/genopt.com perl/vms/genopt.com
--- perl_16735/vms/genopt.com Tue May 21 19:23:02 2002
+++ perl/vms/genopt.com Thu May 23 10:47:57 2002
@@ -2,7 +2,7 @@
$! p1 is filename and mode to open file (filename/write or filename/append)
$! p2 is delimiter separating elements of list in p3
$! p3 is list of items to be written, one per line, into options file
-$
+$!
$ open file 'p1'
$ element=0
$loop:
@@ -30,7 +30,7 @@
$ if y .nes. "" then write file y
$ element=element+1
$ goto loop
-$
+$!
$out:
$ close file
$ exit
diff -ru perl_16735/vms/sockadapt.h perl/vms/sockadapt.h
--- perl_16735/vms/sockadapt.h Tue May 21 19:23:03 2002
+++ perl/vms/sockadapt.h Thu May 23 10:47:46 2002
@@ -2,7 +2,8 @@
*
* Authors: Charles Bailey bailey@newman.upenn.edu
* David Denholm denholm@conmat.phys.soton.ac.uk
- * Last Revised: 4-Mar-1997
+ * Last Revised: 20-May-2002
+ * Previously Revised: 4-Mar-1997
*
* This file should include any other header files and procide any
* declarations, typedefs, and prototypes needed by perl for TCP/IP
@@ -15,6 +16,24 @@
#define __SOCKADAPT_INCLUDED 1
#if defined(DECCRTL_SOCKETS)
+#if defined(MULTINET_SOCKETS)
+ /* Work around a problem in gethostbyaddr()'s return hostent->h_length
+ * via MULTINET headers and a MULTINET link. Default to the DECC stuff
+ * for nearly everything else.
+ * In addition to the MULTINET headers, we must link against
+ * MULTINET:MULTINET_SOCKET_LIBRARY.EXE/SHARE
+ * in order to pick up the fix (at least with: DEC C 6.0-001, or Compaq C
+ * 6.5-001 and Multinet 4.3 Rev A-X; or with: DEC C 5.2-003 and
+ * Multinet 4.2 Rev A-X.
+ */
+# include "multinet_root:[multinet.include.sys]socket.h"
+# include "multinet_root:[multinet.include.netinet]in.h"
+# include "multinet_root:[multinet.include.arpa]inet.h"
+# include "multinet_root:[multinet.include]netdb.h"
+# ifndef INADDR_LOOPBACK
+# define INADDR_LOOPBACK (unsigned int)0x7F000001
+# endif
+#else
/* Use builtin socket interface in DECCRTL and
* UCX emulation in whatever TCP/IP stack is present.
* Provide prototypes for missing routines; stubs are
@@ -24,6 +43,7 @@
# include <inet.h>
# include <in.h>
# include <netdb.h>
+#endif
#if ((__VMS_VER >= 70000000) && (__DECC_VER >= 50200000)) || (__CRTL_VER >= 70000000)
#else
void sethostent(int);
End of Prototype patch.
Peter Prymmer
-
Perl v5.6.0 released
by Gurusamy Sarathy
-
an initial pass at building with a link to Multinet
by PPrymmer