This is fix 6. It should solve several TCP/IP problems. It also provides support for MultiNet on AXP platforms. a) There are several inconsistencies in the return codes (errno) from the UCX socket routines between UCX versions and with UNIX. However, the variable vaxc$errno seems to return consistent in- formation. In my first version I only checked errno which was normally "correct" for UCX 3.0 on an AXP. However, many people reported duplicate accesses to servers, problems when authorization was used etc. This should be working correctly for all UCX versions after applying the present patches. One minor problem remains to solved for UCX, to set the socket non-blocking. I have code working for this with VAX-UCX, but unfortunately there are still some problems on AXP-UCX. I have therefore simply ignored these calls for now. The corresponding status messages are also commented away. b) In my original port I had not tested MultiNet on AXP. This turned out to be very tricky, probably due to my ignorance. If you see an easier way than mine, please tell me. Many thanks to Frederic Hemmer of CERN-CN who pointed me in the right direction. These patches are rather lengthy, unfortunately. Instead of applying the diffs below you can get Mosaic-2.0.VMS.Fix-6.tar.Z and unpack the changed files from this archive. 14-Dec-1993 =============================================================== ************ File PD_ROOT:[MOSAIC.MOSAIC-2_0.LIBWWW2]DESCRIP.MMS;2 31 .IFDEF AXP 32 CDEFS = /Prefix=ANSI/Define=MULTINET 33 .ELSE 34 CDEFS = /Define=MULTINET 35 .ENDIF 36 .ELSE ****** File PD_ROOT:[MOSAIC.MOSAIC-2_0.LIBWWW2]DESCRIP.MMS;1 31 CDEFS = /Define=MULTINET 32 .ELSE ************ Number of difference sections found: 1 Number of difference records found: 5 ************ File PD_ROOT:[MOSAIC.MOSAIC-2_0.LIBWWW2]HTTCP.C;3 34 #if defined(VMS) && !defined(MULTINET) 35 #define FD_SETSIZE 32 36 #else 37 #define FD_SETSIZE 256 38 #endif /* Limit # sockets to 32 for UCX, BSN */ 39 #endif ****** File PD_ROOT:[MOSAIC.MOSAIC-2_0.LIBWWW2]HTTCP.C;2 34 #define FD_SETSIZE 256 35 #endif ************ ************ File PD_ROOT:[MOSAIC.MOSAIC-2_0.LIBWWW2]HTTCP.C;3 370 #ifndef VMS 371 if (ret == -1) ****** File PD_ROOT:[MOSAIC.MOSAIC-2_0.LIBWWW2]HTTCP.C;2 366 if (ret == -1) ************ ************ File PD_ROOT:[MOSAIC.MOSAIC-2_0.LIBWWW2]HTTCP.C;3 376 #endif /* For now until non-blocking works for UCX, BSN */ 377 } ****** File PD_ROOT:[MOSAIC.MOSAIC-2_0.LIBWWW2]HTTCP.C;2 371 } ************ ************ File PD_ROOT:[MOSAIC.MOSAIC-2_0.LIBWWW2]HTTCP.C;3 458 #ifndef VMS 459 if ((status < 0)&&(errno == EISCONN)) 460 #else 461 /* 462 * A UCX feature: Instead of returning EISCONN UCX returns EADDRINUSE. 463 * Test for this status also. 464 */ 465 if ((status < 0)&&((errno == EISCONN)||(errno == EADDRINUSE))) 466 #endif /* VMS, UCX, BSN */ 467 #else ****** File PD_ROOT:[MOSAIC.MOSAIC-2_0.LIBWWW2]HTTCP.C;2 452 if ((status < 0)&&(errno == EISCONN)) 453 #else ************ ************ File PD_ROOT:[MOSAIC.MOSAIC-2_0.LIBWWW2]HTTCP.C;3 491 #ifndef VMS 492 if ((status < 0)&&(errno != EALREADY)&&(errno != EISCONN)) 493 #else 494 /* 495 * UCX pre 3 apparently returns errno = 18242 instead of any of the 496 * EALREADY or EISCONN values. 497 */ 498 if ((status < 0)&&(errno != EALREADY)&&(errno != EISCONN)&& 499 (errno != 18242)) 500 #endif /* UCX, BSN */ 501 #else ****** File PD_ROOT:[MOSAIC.MOSAIC-2_0.LIBWWW2]HTTCP.C;2 477 if ((status < 0)&&(errno != EALREADY)&&(errno != EISCONN)) 478 #else ************ ************ File PD_ROOT:[MOSAIC.MOSAIC-2_0.LIBWWW2]HTTCP.C;3 539 #ifndef VMS 540 if (ret == -1) ****** File PD_ROOT:[MOSAIC.MOSAIC-2_0.LIBWWW2]HTTCP.C;2 516 if (ret == -1) ************ ************ File PD_ROOT:[MOSAIC.MOSAIC-2_0.LIBWWW2]HTTCP.C;3 545 #endif /* For now until non-blocking works for UCX, BSN */ 546 } ****** File PD_ROOT:[MOSAIC.MOSAIC-2_0.LIBWWW2]HTTCP.C;2 521 } ************ ************ File PD_ROOT:[MOSAIC.MOSAIC-2_0.LIBWWW2]HTTCP.C;3 565 #ifdef VMS 566 int nb; 567 #endif /* VMS, BSN */ 568 ****** File PD_ROOT:[MOSAIC.MOSAIC-2_0.LIBWWW2]HTTCP.C;2 540 ************ ************ File PD_ROOT:[MOSAIC.MOSAIC-2_0.LIBWWW2]HTTCP.C;3 601 #ifndef VMS 602 return read (fildes, buf, nbyte); 603 #else 604 nb = read (fildes, buf, nbyte); 605 /* 606 * A vaxc$errno value of 8428 (SS$_LINKDISCON) indicates end-of-file. 607 */ 608 if ((nb <= 0) && (errno != ECONNRESET) && (vaxc$errno == 8428)) nb = 0; 609 return nb; 610 #endif /* UCX, BSN */ 611 #else 612 nb = socket_read (fildes, buf, nbyte); 613 return nb; 614 #endif /* MULTINET, BSN */ ****** File PD_ROOT:[MOSAIC.MOSAIC-2_0.LIBWWW2]HTTCP.C;2 573 return read (fildes, buf, nbyte); 574 #else 575 return socket_read (fildes, buf, nbyte); 576 #endif /* MULTINET, BSN */ ************ Number of difference sections found: 9 Number of difference records found: 44 ************ File PD_ROOT:[MOSAIC.MOSAIC-2_0.LIBWWW2]TCP.H;3 179 #ifdef __Alpha_AXP 180 #define read decc$read 181 #define write decc$write 182 #define close decc$close 183 #define sleep decc$sleep 184 #endif /* AXP, BSN */ 185 ****** File PD_ROOT:[MOSAIC.MOSAIC-2_0.LIBWWW2]TCP.H;2 179 ************ ************ File PD_ROOT:[MOSAIC.MOSAIC-2_0.LIBWWW2]TCP.H;3 202 ****** File PD_ROOT:[MOSAIC.MOSAIC-2_0.LIBWWW2]TCP.H;2 196 #ifndef NotBSN 197 #undef NETREAD 198 #define NETREAD read 199 #endif /* BSN for now */ 200 ************ Number of difference sections found: 2 Number of difference records found: 10 ************ File PD_ROOT:[MOSAIC.MOSAIC-2_0.LIBHTMLW]DESCRIP.MMS;2 31 .IFDEF AXP 32 CDEFS = /Prefix=ANSI/DEFINE=(MOTIF,XMOSAIC,MULTINET) 33 .ELSE 34 CDEFS = /DEFINE=(MOTIF,XMOSAIC,MULTINET) 35 .ENDIF 36 .ELSE ****** File PD_ROOT:[MOSAIC.MOSAIC-2_0.LIBHTMLW]DESCRIP.MMS;1 31 CDEFS = /DEFINE=(MOTIF,XMOSAIC,MULTINET) 32 .ELSE ************ Number of difference sections found: 1 Number of difference records found: 5 ************ File PD_ROOT:[MOSAIC.MOSAIC-2_0.LIBHTMLW]HTMLJOT.C;3 70 #if defined(__TIME_T) && !defined(__TYPES_LOADED) && !defined(__TYPES) 71 #define __TYPES_LOADED 72 #endif /* Different defs in OpenVMS and MultiNet include files, BSN */ 73 #include "multinet_root:[multinet.include.sys]types.h" ****** File PD_ROOT:[MOSAIC.MOSAIC-2_0.LIBHTMLW]HTMLJOT.C;2 70 #include "multinet_root:[multinet.include.sys]types.h" ************ Number of difference sections found: 1 Number of difference records found: 3 ************ File PD_ROOT:[MOSAIC.MOSAIC-2_0.SRC]DESCRIP.MMS;2 36 .IFDEF AXP 37 CPREF = /Prefix=ANSI 38 .ELSE 39 CPREF = 40 .ENDIF 41 .IFDEF DEBUG 42 CDEFS =$(CPREF)/Define=($(VMS_DEFS)MULTINET,DEBUGVMS) 43 .ELSE 44 CDEFS =$(CPREF)/Define=($(VMS_DEFS)MULTINET) 45 .ENDIF ****** File PD_ROOT:[MOSAIC.MOSAIC-2_0.SRC]DESCRIP.MMS;1 36 .IFDEF DEBUG 37 CDEFS =/Define=($(VMS_DEFS)MULTINET,DEBUGVMS) 38 .ELSE 39 CDEFS =/Define=($(VMS_DEFS)MULTINET) 40 .ENDIF ************ Number of difference sections found: 1 Number of difference records found: 9 ************ File PD_ROOT:[MOSAIC.MOSAIC-2_0.SRC]GUI.C;3 69 #if defined(__TIME_T) && !defined(__TYPES_LOADED) && !defined(__TYPES) 70 #define __TYPES_LOADED 71 #endif /* Different defs in OpenVMS and MultiNet include files, BSN */ 72 #include "multinet_root:[multinet.include.sys]types.h" ****** File PD_ROOT:[MOSAIC.MOSAIC-2_0.SRC]GUI.C;2 69 #include "multinet_root:[multinet.include.sys]types.h" ************ Number of difference sections found: 1 Number of difference records found: 3 ************ File PD_ROOT:[MOSAIC.MOSAIC-2_0.SRC]MO-WWW.C;3 66 #ifdef MULTINET 67 #if defined(__TIME_T) && !defined(__TYPES_LOADED) && !defined(__TYPES) 68 #define __TYPES_LOADED 69 #endif /* Different defs in OpenVMS and MultiNet include files, BSN */ 70 #endif /* MULTINET, BSN*/ 71 #include "tcp.h" ****** File PD_ROOT:[MOSAIC.MOSAIC-2_0.SRC]MO-WWW.C;2 66 #include "tcp.h" ************ Number of difference sections found: 1 Number of difference records found: 5 ************ File PD_ROOT:[MOSAIC.MOSAIC-2_0.SRC]MOSAIC.H;4 79 #if defined(MULTINET) && defined(__Alpha_AXP) 80 #define getpid decc$getpid 81 #define getcwd decc$getcwd 82 #define stat decc$stat 83 #define cuserid decc$cuserid 84 #define mkdir decc$mkdir 85 #endif /* Some non-ANSI routines need a prefix */ 86 #endif /* VMS, BSN */ ****** File PD_ROOT:[MOSAIC.MOSAIC-2_0.SRC]MOSAIC.H;3 79 #endif /* VMS, BSN */ ************ Number of difference sections found: 1 Number of difference records found: 7 ************ File PD_ROOT:[MOSAIC.MOSAIC-2_0]MAKE_MOSAIC.COM;2 37 $ If IP .EQS. "MULTINET" .AND. Platform .EQS. "Alpha" Then - 38 COpt = COpt + "/PREFIX=ANSI" 39 $ If F$Locate("DEB",Args) .NE. F$Length(Args) Then Show Symbol/Local * ****** File PD_ROOT:[MOSAIC.MOSAIC-2_0]MAKE_MOSAIC.COM;1 37 $ If F$Locate("DEB",Args) .NE. F$Length(Args) Then Show Symbol/Local * ************ Number of difference sections found: 1 Number of difference records found: 2 .