The UnixWare/OpenServer Development Kit, or UDK, is the software development kit that accompanies the UnixWare 7® Release 7.1.1 product. The UDK gives you the ability to create a single binary that will run on all three of SCO's major operating system platforms: UnixWare 7, SCO OpenServer(TM) Release 5, and SCO UnixWare 2.1.X. The UDK tools themselves are supported for installation and use on UnixWare 7 Release 7.1.1 (UW7.1.1), SCO OpenServer Release 5.0.5 (OSR5.0.5), and SCO UnixWare 2.1.3 (UW2.1.3). Because the UnixWare 7 development tools are available on all of SCO's existing platforms, developers using those platforms can get access now to the advanced features provided by the UDK: C++ exception handling, 64-bit integers, support for Java(TM) native methods, and much more.
The UnixWare/OpenServer Development Kit is a set of tools, libraries, header files and other files. It can be thought of as having two basic sets of components: compile-time components, those files necessary when you are creating a binary; and run-time components, those files needed by the binary you created when it is loaded and run. The compile-time components are the tools, like the compiler, assembler, optimizer, linker, header files and libraries. Run-time components consist mostly of shared libraries, but also include certain configuration files and tools such as debuggers. Some of these files, like shared libraries, are needed at both compile and run-time. In fact, since the UDK tools are themselves binaries built by the UDK, all of the run-time components must be present on the system for the compile-time tools to work.
For a ``universal'' binary to be able to run on SCO OpenServer Release 5, or SCO UnixWare 2.1.3, the appropriate run-time components of the UDK must be installed on the target platform. These components provide a compatibility layer that allows the UDK binary to interact correctly with the native system. There are two such compatibility layers: the UDK Compatibility Module for SCO OpenServer and the UDK Compatibility Module for SCO UnixWare 2.1.3.
If you are interested in keeping up with the latest tools and information about developing software on or for SCO, we invite you to consider the SCO Global Developer Program. You can join at no cost, and enjoy the benefits of special developer discounts on software and services, access to prerelease software, and other advantages of membership in the SCO developer technical community. For more information, visit the Developer Programs web site.
| UnixWare 7 | UnixWare 2 | OpenServer 5 |
applications developed with
this UDK on releases: |
7.1.1 | 2.1.3 | 5.0.5 | will run on releases: |
7.1.1
7.1.0 7.0.1 |
2.1.3 |
5.0.5
5.0.4 5.0.2 |
|---|
The following components are new or updated in this UDK release:
For more information, see the ``UnixWare 7 Features'' topic in the UnixWare 7 documentation set.
Other components remain unchanged from the previous UDK release.
The UnixWare/OpenServer Development Kit (UDK) product media consists of one CD-ROM containing the UDK and the Java Development Kit for SCO Operating Systems (JDK).
If you are interested in using only the Java Development Kit, it may be licensed separately from the UnixWare/OpenServer Development Kit. For information on installing the Java Development Kit, see the Java Development Kit 1.1.7B for SCO Operating Systems Release Notes.
The UnixWare/OpenServer Development Kit (UDK) product consists of the following packages. Note that some packages are not applicable to all platforms.
UDK Packages
| Package | Description | Host Platforms |
|---|---|---|
| baseupd | Base Operating System Compatibility Update (system header files) | OSR5.0.5 and UW2.1.3 |
| usoftint | Software Packaging Tools | UW7.1.1, UW2.1.3, OSR5.0.5 |
| uccs | UDK Optimizing C Compilation System | OSR5.0.5 and UW2.1.3 (part of UW7.1.1 CoreOS set) |
| ucplus | UDK C++ Compilation System | UW7.1.1, UW2.1.3, OSR5.0.5 |
| ustdcomps | UDK C++ Standard Components (container classes and other useful classes and tools) | UW7.1.1, UW2.1.3, OSR5.0.5 |
| uedebug | UDK Enhanced Debugger (command line and graphical debugger) | UW2.1.3 (part of CoreOS set for UW7.1.1, part of OSRcompat for OSR5.0.x) |
| tcldev | Tcl/Vtcl development (headers and libraries) | UW7.1.1 |
| xdevsys | Graphics Development (X11R6.1 headers, libraries, examples, etc.) | UW7.1.1, UW2.1.3, OSR5.0.5 |
| mtfdev | OSF Motif Development Kit (Motif 1.2.5 headers, libraries, etc.) | UW7.1.1, UW2.1.3, OSR5.0.5 |
| TEDdincl | CDE Desktop Developers Include Files | UW7.1.1 |
| TEDddemos | CDE Desktop Demos and Examples | UW7.1.1 |
| TEDdhelp | CDE Desktop Help Development System | UW7.1.1 |
| TEDdappb | CDE Desktop Application Builder | UW7.1.1 |
| TEDdman | CDE Desktop Developer Manual Pages | UW7.1.1 |
| unmsdk | Network Management SDK (headers and libraries) | UW7.1.1, UW2.1.3, OSR5.0.5 |
| jdk117 | JDK 1.1.7B for SCO (base Java development kit) | UW2.1.3; OSR5.0.5, OSR5.0.4, OSR5.0.2; UW7.1.0 (part of BaseWeb set for UW7.1.1) |
| jdk117pls | JDK 1.1.7B for SCO (w/Docs, Demos and Debug versions) | UW7.1.1, UW7.1.0; UW2.1.3; OSR5.0.5, OSR5.0.4, OSR5.0.2 |
| jdkdoc | JDK Online Documentation (integrated into UW7.1.1 SCOhelp) | UW7.1.1, UW2.1.3 |
| jdkman | JDK Manual Pages (integrated into UW7.1.1 SCOhelp) | UW7.1.1, UW2.1.3 |
| scohelp | SCOhelp Online Doc System (documentation reader) | UW2.1.3 (part of CoreOS set for UW7.1.1) |
| UDKdoc | UnixWare/OpenServer Developer Documentation | UW7.1.1 and UW2.1.3 (also available via SCO's web site) |
| BASEman | UnixWare Manual Pages | UW2.1.3 and OSR5.0.5 (part of Documentation set for UW7.1.1) |
| udkman | UDK Manual Page Reader | UW2.1.3 and OSR5.0.5 |
| OSRcompat | UDK Compatibility Module for SCO OpenServer | OSR5.0.2, OSR5.0.4, OSR5.0.5 |
| UW2compat | UDK Compatibility Module for SCO UnixWare 2.1.3 | UW 2.1.3 |
The UnixWare 7.1.1 documentation is available from:
The SCO OpenServer SCOhelp system cannot display the UnixWare 7.1.1 documentation.
To access the UDK documentation from any of these sources, select Software Development from the list of topics.
To access UnixWare 7 manual pages from the command line on SCO UnixWare 2.1.3 and SCO OpenServer systems, see ``UnixWare 7 manual pages on SCO OpenServer and SCO UnixWare Systems''.
See also:
When you install the UDK on SCO OpenServer or SCO UnixWare, the UnixWare 7 manual pages (BASEman) are loaded into a parallel manual page directory. Use udkman to view the UnixWare 7 manual pages, and continue to use man to view the SCO OpenServer or SCO UnixWare manual pages. The UDK compatibility modules must be installed before the udkman package.
The most current information about SCO hardware support is available on the SCO Compatible Hardware Web Pages (CHWP). A static version of the CHWP for UnixWare 7.1.1 is available on the UDK CD (under info/hardware/chwp/chwp.htm)
The Java Development Kit (JDK) is a powerful development environment that is portable, object-oriented, platform independent, and especially well suited for developing Internet-enabled applications. The JDK includes the Java compiler, interpreter, classes, and documentation.
Documentation for the JDK 1.1.7B is contained in the jdk117pls package and, for UnixWare 7 only, also in the jdkdoc and jdkman packages. All of the documentation is in HTML format and may be viewed with any browser you have installed on your system. The documentation included in the jdk117pls package is not integrated into OpenServer SCOhelp or UnixWare 2 Dynatext Library graphical help systems. However, the documentation included in the jdkdoc and jdkman packages is integrated with SCOhelp on the UnixWare 7 platform.
This component provides TriTeal® Enterprise Desktop development tools and documentation. They support the development of new TED® applications, and the integration of existing OSF/Motif®, OPEN LOOK®, and Indigo Magic® applications on the UnixWare 7 CDE desktop. Desktop development kit packages include:
Individual packages can be selected from the UDK installation screen.
These tools support development on the UnixWare 7 platform only; it is not a cross-platform development environment.
The Desktop Development Kit includes its own documentation, which is not included in the UnixWare 7.1.1 documentation set. Further TED development documentation is available from the TriTeal website.
The UnixWare 7.1.1 UDK installs on:
The following sections give the minimum disk requirements for fully installed UDK packages:
The unlabeled numbers are 512-byte blocks (1/2 of a kilobyte, which is 1024 bytes).
| udk | 202 |
| usoftint | 1244 |
| ucplus | 5009 |
| ustdcomps | 2764 |
| tcldev | 1813 |
| xdevsys | 8848 |
| mtfdev | 11404 |
| TEDdincl | 9404 |
| TEDddemos | 1544 |
| TEDdhelp | 5645 |
| TEDdappb | 19269 |
| TEDdman | 1951 |
| unmsdk | 452 |
| jdk117pls | 76509 |
| jdkdoc | 24771 |
| jdkman | 221 |
| UDKdoc | 31533 |
| Total | 202583 blocks (104Mb) |
| UW2compat | 15593 |
| baseupd | 8946 |
| usoftint | 855 |
| uccs | 20580 |
| ucplus | 5010 |
| ustdcomps | 2764 |
| uedebug | 5261 |
| mtfdev | 11404 |
| xdevsys | 8847 |
| unmsdk | 452 |
| scohelp | 25479 |
| UDKdoc | 31533 |
| BASEman | 56832 |
| udkman | 106 |
| jdk117 | 28135 |
| jdk117pls | 76509 |
| Total | 298306 blocks (153Mb) |
| baseupd | 8128 | |
| usoftint | 855 | |
| uccs | 19286 | |
| ucplus | 5010 | |
| ustdcomps | 2764 | |
| mtfdev | 11404 | |
| xdevsys | 8847 | |
| unmsdk | 452 | |
| BASEman | 56832 | |
| udkman | 106 | |
| OSRcompat | 22274 | |
| jdk117 | 28135 | |
| jdk117pls | 76509 | |
| Total | 240596 blocks (123Mb) |
| udk | 202 |
| baseupd | 8128 |
| usoftint | 1244 |
| ucplus | 5010 |
| ustdcomps | 2764 |
| tcldev | 2047 |
| xdevsys | 8847 |
| mtfdev | 11404 |
| TEDdincl | 9420 |
| TEDddemos | 1544 |
| TEDdhelp | 5645 |
| TEDdappb | 19269 |
| TEDdman | 1951 |
| uedebug | 5261 |
| uccs | 20580 |
| unmsdk | 452 |
| jdk117 | 28135 |
| jdk117pls | 76509 |
| jdkdoc | 24771 |
| jdkman | 221 |
| scohelp | 25479 |
| udkman | 106 |
| BASEman | 56832 |
| UDKdoc | 31533 |
| OSRcompat | 22274 |
| UW2compat | 15593 |
The following sections provide instructions for installing the UDK on SCO UnixWare and SCO OpenServer as well as UnixWare 7 systems:
If you want to install the UDK along with the JDK, follow this procedure rather than the instructions in the JDK Release Notes.
The system displays the packages contained on the CD-ROM.
Note that if you install Release 7.1.1 and then install the UDK with either the tcldev or TEDdincl packages selected, you will see this message:
WARNING: UnixWare 7 Update 7.1.1 should be reapplied
You should then re-apply the update711 package from the
Release 7.1.1 installation CD using pkgadd, as in this example:
pkgadd -d cdrom1 update711
A workaround is to make sure that neither the tcldev or TEDdincl packages are selected when you install the UDK (note that the TEDdappb, TEDddemos, TEDdhelp, and TEDdman packages require the TEDdincl package and so must also be de-selected). The above message will not appear and you will not need to re-apply Release 7.1.1.
If any UDK packages already exist on the system, including any previous OSRcompat module, they must be removed before beginning the installation of the UDK.
The system displays a list of packages that may be installed from the CD.
If you wish to install only the Java tools, run the script OSRUDKInst.sh and follow the instructions.
Other UDK packages on the CD should not be installed on SCO OpenServer.
All packages other than OSRcompat require SCO OpenServer Release 5.0.5 or later.
The system displays the packages contained on the CD-ROM in the upper part of the window.
The only required package is UW2compat, which requires UnixWare 2.1.3. If the ucplus package is desired, uccs should be installed first. If either uccs or ucplus is installed, baseupd should also be installed, and /udk/usr/ccs/bin should appear in your PATH before /usr/bin or /usr/ccs/bin. If either xdevsys or mtfdev is installed, /udk/usr/X/bin should appear in your PATH before /usr/X/bin or /usr/bin/X11.
If you wish to install only the Java tools, choose the following packages: UW2compat, jdk117, jdk117pls
``Universal'' binaries developed on the UDK Release 7.1.1 will run on SCO OpenServer and SCO UnixWare platforms when the appropriate compatibility modules are installed:
To install a compatibility module, enter:
pkgadd -d / mount_directory compat_module_name
The UDK can be used to produce binaries that can be executed on UnixWare 7, SCO UnixWare 2.1.x, and SCO OpenServer 5.0.x systems. To take advantage of this capability, you must:
See the following sections for detailed usage notes:
If you are compiling an application using the Release 7.1.1 version of libc and the UDK, and you want your application to also run on Release 7.0.1, then you may need to include the following in your cc command line:
-l cudk70
If you do not, then applications built with the Release 7.1.1 version of libc may not run on Release 7.0.1. This is because 81 symbols from the archive part of libc (listed in the table below) were moved into the shared part for Release 7.1.0.
To provide a way for users to create applications that use these symbols and run on all UnixWare 7 releases, an archive library (libcudk70.a), is provided which contains only the following symbols (moved from the archive to the shared part of libc since Release 7.1.0):
| _adjtime | adjtime |
| _async_daemon | async_daemon |
| _dtop | |
| _ecvt | ecvt |
| _exect | exect |
| _exportfs | exportfs |
| _fcvt | fcvt |
| _fstat | fstat |
| _fstat32 | fstat32 |
| _fstat64 | fstat64 |
| _fstatfs | fstatfs |
| _gcvt | gcvt |
| _getdents | getdents |
| _gethz | gethz |
| _gtty | gtty |
| _iba_dtop | |
| _iba_ltostr | |
| _keyctl | keyctl |
| _lstat | lstat |
| _lstat32 | lstat32 |
| _lstat64 | lstat64 |
| _ltostr | |
| _mincore | mincore |
| _nfs_getfh | nfs_getfh |
| _nfssvc | nfssvc |
| _nfssys | |
| _plock | plock |
| _realpath | realpath |
| _setegid | setegid |
| _seteuid | seteuid |
| _settimeofday | settimeofday |
| _stat | stat |
| _stat32 | stat32 |
| _stat64 | stat64 |
| _statfs | statfs |
| _stty | stty |
| _syscall | syscall |
| _sysfs | sysfs |
| _sysi86 | sysi86 |
| _ttyslot | ttyslot |
| _uadmin | uadmin |
| _utssys | utssys |
| _vfork | vfork |
Note that the _stat and stat interfaces listed above are the versions of the stat system call that provide the older System V Release 3-style stat structure (before expanded fundamental types). Normally, the stat.h header file translates a call to stat(2) to xstat, which has always been in the shared part libc.
New applications compiled without -l cudk70 on Release 7.1.1 will no longer bind the symbols listed above into their own images and will, instead, expect to find them in the shared part of libc. Since the native versions of the shared part of libc on Release 7.0.1 do not contain the above symbols, such applications will not run on these systems. To permit Release 7.1.1 applications to run on UnixWare 7 Release 7.0.1, include the libcudk70.a library during the linking phase of compiling the application.
Here is an example:
# start on a Release 7.1.1 systemYou can see what is happening here by looking for the realpath symbol in the a.outs. In the original build, realpath is unresolved:# a simple test program; realpath() is one of the APIs that moved # from the static to the dynamic part of libc in Voyager UW701> cat rp.c
#include <stdlib.h> #include <sys/param.h> #include <stdio.h>
int main() { char p[MAXPATHLEN]; realpath(".", p); printf("%s\n", p); } # build on Release 7.1.1 in the usual way UW711> /usr/ccs/bin/cc rp.c
# run on Release 7.1.1 ... works great UW711> ./a.out /lfs/home1/jls/test
# now move executable to a Release 7.0.1 system UW711> rcp a.out UW701:test
# now we're on the Release 7.0.1 system
# try to run it here ... test fails UW701> ./a.out dynamic linker: ./a.out: symbol not found: realpath Killed
# get back to Release 7.1.1 system # and this time link program against special library UW711> cc rp.c -lcudk70
# executable still works on Release 7.1.1 UW711> ./a.out /lfs/home1/jls/test
# now move it to the Release 7.0.1 system again UW711> rcp a.out UW701:test
# and try it there ... this time it works UW701> ./a.out /home/jls/test
UW701> nm a.out | grep realpath [46] | 134513700| 52|FUNC |GLOB |0 |UNDEF |realpathwhich works as long as realpath is found in libc.so.1, which happens on Release 7.1.1 but not on Release 7.0.1.
In the second build, realpath has been statically linked in from the libcudk70 archive:
UW701> nm a.out | grep realpath [31] | 0| 0|FILE |LOCL |0 |ABS |realpath.c [53] | 134515216| 36|FUNC |GLOB |0 |8 |realpath [63] | 134515216| 36|FUNC |GLOB |0 |8 |_realpathThis executable can be run in environments where realpath is not in libc.so.1.
In upcoming releases, more UnixWare system libraries and APIs will be made available through shared objects. Existing application binaries will continue to work as they do today, but when relinked on these newer releases, it is possible that the application binaries produced will not run on older releases.
Similarly, shared libraries currently using non-PIC objects will also continue to run as they do today, and when relinked on a newer release, it is again possible to create shared libraries that will not run on older releases.
Generally, SCO will provide updated UDKs so that older releases can run these newer binaries and shared libraries, but it is not required that all systems be upgraded. Thus updates of libcudk70.a to enable building binaries and shared libraries that can run on older releases will most likely be provided as these APIs and libraries are made available through shared objects.
To create an executable or shared object, use the CC or cc command. If any input object files contain C++ code, you must use the CC command.
ld should be invoked directly only if the -r option is used to create a relocatable object to be used in a later link.
UnixWare 7 provides two versions of the traditional
fork(2)
system call: fork1 and forkall. In a process with only
one light-weight process (LWP), there is no difference between the two
routines. In a process with multiple LWPs, fork1
will create a child process with only a single LWP, the LWP
that invoked fork1; forkall will create a child process
that has copies of all LWPs from the parent process.
Until UnixWare 7.0.1, fork was a synonym for forkall.
In UnixWare 7.0.1, a change was introduced for processes that
link with libthread: fork became a synonym
for fork1 instead
of forkall. This was done to conform to the POSIX and
X/Open definitions of fork in multithreaded applications.
However, certain applications had grown to
depend on the behavior of fork and broke when the change
was introduced. (There was no change in behavior for
processes that do not link with libthread). In this
release, the original behavior of
fork has been restored; it is now once again synonymous
with forkall.
Applications that link with libthread and want the
POSIX and X/Open behavior for fork can invoke
fork1 directly or define the global variable
_thread_sys_behavior and assign 1 as its value:
int _thread_sys_behavior = 1;
Process tracing allows you to see what functions your process is calling, while it is executing. To trace an executable, you can set the following environment variables:
LD_TRACE=[sym,tim,hitim,lib,ret]
fd
LD_TRACE_FILENO=
LD_TRACE_ARGNO=num
LD_TRACE_SCALE=num
LD_TRACE_STACK=funcname[,funcname...]
LD_TRACE_FRAMES=num
libthread.
If LD_TRACE is set but doesn't contain any
of the specified flags, you get a line for
each function called:
sym(arg1, arg2, arg3) from hex_addr
You only see functions known to the dynamic
linker; that is, no calls to static functions
or functions defined in the same shared
library as the caller and linked with
the -Bsymbolic option to ld.
You can specify the number of arguments
using LD_TRACE_ARGNO (default 3).
If a given library provides a table of functions and argument formats to the dynamic linker, then the dynamic linker will know the correct number of arguments and their formats (hex, decimal, unsigned, string, character, long long, float, double, long double). Varargs functions currently always print 3 hex args after the last fixed argument. Currently, only libc provides such a table.
If the sym flag is set, you get the symbol name
instead of hex_addr. If the lib
flag is set you get sym@lib and
hex_addr@lib (or name@lib).
Symbolic names for the reference address can be wrong if the references come from symbols that have not been exported and so are not known to the dynamic linker. This is especially prevalent for references from a.outs. The dynamic linker picks the symbol from the same object that is closest to, but less than the reference address.
If tim is set you get:
... at sec.usec
This uses gettimeofday; timing is not available until all shared library _init routines have been run.
If hitim is set, you get timing using the Pentium's
high resolution rdtsc instruction. This will be either
a raw value:
... at ticks
or a scaled value, if you set LD_TRACE_SCALE.
LD_TRACE_SCALE expects an integer representing
the clock rate of your chip in mhz (e.g, 133 for
a 133 mhz Pentium).
... at sec.ticks
Caveats for the high resolution timer:
USER_RDTSC to non-zero
using idtune and rebuilt/rebooted the kernel.
SIGSEGV
if you set LD_TRACE=hitim.
Access to rdtsc for user-level processes seems
to be on by default in OpenServer.
If ret is set, you get another line per call:
=> sym[@lib] returned hex_val
The return value format is also specified by the function format table, if present. No format is printed for functions that return structs.
Output goes to file descriptor 2 unless you
set LD_TRACE_FILENO, in which case it goes
to fd.
Finally, instead of the regular 1 per call trace,
you can get a stack trace for every instance of
a given call. Say you want to see a stack
trace for every call to malloc and printf.
LD_TRACE_STACK=malloc,printf
You can control the output using:
LD_TRACE=[sym,lib,ret,tim,hitim]
LD_TRACE_ARGNO=num
LD_TRACE_FILENO=num
LD_TRACE_FRAMES=num
The timings and return values are printed
only for the top function in each stack (the one
you asked to trace). sym and lib
control the format
of the output for the rest of the frames as well.
The depth of the stack can be limited using
LD_TRACE_FRAMES. A value of 0 (the default)
means print the entire stack.
A caveat about stack traces: the algorithm used by this feature works in most cases; one exception is for functions that return structs. Tracing through signal handlers is also likely to be problematic.
UDK-built binaries using the following components will not work on SCO OpenServer:
The dynamic linker provided with the UDK sometimes fails to identify the target operating system of a binary (e.g., with binaries that have been run through some versions of GNU strip). If SCO OpenServer binaries that executed successfully before you installed the UDK fail to execute, use the elfmark -t osr5 command to positively identify them as SCO OpenServer binaries.
The graphical interface to debug will occasionally produce the following message: message pops up:
Invalid operation on running object p??This just indicates that your previous request from the GUI for that particular object (process) has not completed as yet and your current request has been ignored. This may occur when stepping through the source code very quickly, when the current machine is slow or the machine's system resources are under a heavy load.
The solution is to try again after a small pause.
In UnixWare 7 the online help for the graphical debugger is linked to the online documentation library for UnixWare 7. Therefore, the debugger online help does not work on SCO OpenServer systems.
Most of the new C++ Standard Library is not in UnixWare 7. This includes:
Contrary to what is stated in the topic ``Porting, integration and compatibility'' in the UnixWare 7 documentation set, applications linked against the UnixWare 7 FTP library (libftp) may be run on both OpenServer 5 and UnixWare 2.1.X systems provided that the appropriate compatibility module has been installed.
Some system administration scripts and other programs, which run with root privilege, create temporary files with potentially predictable names in public directories such as /tmp. In previous releases of UnixWare 7, it was possible for ordinary users to render a system unusable by linking protected files onto the names used by the programs. To guard against this type of attack, restrictions have been placed on the following system calls in Release 7.1.1:
| System call | Restriction |
|---|---|
| link(2) | If the ``sticky bit'' (see chmod(2) is set on the directory in which the link is being created, either the directory or the object being linked from must be owned by the calling user ID. |
| rename(2) | If the sticky bit is set on the destination directory, the object being renamed cannot be a symbolic link, and either the directory or the object being renamed must be owned by the calling user ID. If the destination name refers to an exiting file, either this file or the destination directory must be owned by the calling user ID. |
| symlink(2) | If the sticky bit is set on the directory in which the link is being created, the directory must be owned by the calling user ID. |
If the stated conditions are not met, the system call will fail with the error EPERM (Not privileged) set in errno. The P_OWNER privilege is required to override this restriction.
These restrictions are also apparent in the behavior of the ln(1) and mv(1) commands, which use these system calls, when used with the memfs, sfs, s5 and vxfs filesystem types on a Release 7.1.1 system.
Release 7.1.1 of UnixWare 7 includes in-kernel sockets in which the socket routines used with the Internet (AF_INET and AF_INET6) and UNIX domain (AF_UNIX) families have been implemented as individual system calls. Previous releases of UnixWare implemented sockets as library calls, each of which might need to invoke many system calls to perform its function. The new in-kernel sockets implementation greatly enhances the performance of networking commands and services that use sockets by reducing the system overhead due to context switching. Other benefits include:
The define constant __OLD_SOCKET__ requests that the previous version of UnixWare 7 sockets be used, if available, instead of the in-kernel socket subsystem that is included in Release 7.1.1. Socket applications compiled on a Release 7.1.1 system will work on earlier releases of UnixWare 7 provided that PTF7401 has been installed on that system, or the application has been compiled with -D__OLD_SOCKET__ specified.
On a Release 7.1.1 system, the behavior of the sockets subsystem is controlled by the following parameters to inconfig(1Mtcp):
If set to 0 (default), connect returns -1 and sets EINPROGRESS in errno. However, the connection request is not aborted, and the connection is established asynchronously. Subsequent connect calls to the socket will fail if a connection has not yet been set up, and will return EALREADY in errno.
If set to 1, connect returns 0 and does not set a value in errno. The connection will complete synchronously and without appreciable delay. This ensures compatibility for applications which have been developed on operating systems where EINPROGRESS is not set. LI "ss_selectrdband" Determines how select(3C) will behave when a socket, for which an exception descriptor set has been defined, is shut down or closed for read operations. If set to 0 (default), exception bits are not set. If set to 1, exception bits are set.
The SI_U7COMPAT ioctl command, described below, controls the behavior of individual sockets.
The behavior of sockets when handling asynchronous events and errors was changed in Release 7.1.1. Compatibility with behavior in earlier releases of UnixWare 7 may be obtained using the SI_U7COMPAT ioctl(2) command on an individual socket file descriptor:
#include <sys/sockmod.h> ... int err, fd, x; ... /* Create a socket */ fd = socket(domain, type, protocol); ... /* Select new behavior */ x = 0; err = ioctl(fd, SI_UW7COMPAT, &x); ... /* Select old behavior */ x = 1; err = ioctl(fd, SI_UW7COMPAT, &x);In the above examples, the value passed in by the argument x controls the behavior of the socket as follows:
revent member of the file descriptor's pollfd
structure.
Default socket behavior is controlled by the value of the inconfig(1Mtcp) ss_uw7_compat parameter.
The in-kernel sockets implementation in Release 7.1.1 is closer in behavior to BSD 4.3 sockets than was the sockets implementation in previous releases of UnixWare. The tables below update the tables given in ``Moving sockets applications to UnixWare 7'' in the online documentation.
Connection-mode primitives
| BSD 4.3 | UnixWare 7 |
|---|---|
| If connect is called on an unbound socket, the protocol determines whether or not the endpoint will be bound before the connection takes place | When connect is called on an unbound socket, that socket is always bound to an address selected by the transport provider |
Data transfer primitives
| BSD 4.3 | UnixWare 7 |
|---|---|
| If the MSG_PEEK flag has been set when sendmsg is called, and access rights are available, the access rights will be copied, leaving them available for reading by a subsequent call to recvmsg | If the MSG_PEEK flag is specified in a call to recvmsg, and access rights are available, the access rights will be transferred to the user buffer associated with the receiving socket. They are then destroyed, and the transferring socket has no further access to them. They are therefore unavailable to a subsequent call to recvmsg. Any data associated with the access rights will also be copied to the user buffer and will not be available to recvmsg |
Information primitives
| BSD 4.3 | UnixWare 7 |
|---|---|
| The SIOCSPGRP and FIOSETOWN commands for the ioctl(2) system call and the F_SETOWN command for the fcntl(2) system call take as arguments a positive process id or a negative process group id that identifies the intended recipient list of subsequent SIGURG and SIGIO signals | The only acceptable arguments to ioctl(2) and fcntl(2) are the caller's process id or a negative process group id which has the same absolute value as the caller's process id. In other words, the calling process is the only recipient of SIGURG and SIGIO signals |
Local management
| BSD 4.3 | UnixWare 7 |
|---|---|
| setsockopt can be used at any time during the life of a socket. | Because of the state diagram specified by the Transport Provider Interface (TPI), a setsockopt operation on a transport provider conforming to this specification will fail if issued on a socket that is not bound to a local address. Specifically, if a socket is unbound and setsockopt is used, then the operation will succeed in the AF_INET domain, but will fail in the AF_UNIX domain |
Signals
| BSD 4.3 | UnixWare 7 |
|---|---|
| SIGIO is delivered every time new data is appended to the socket input queue | SIGIO is delivered only when data is appended to a socket queue that was previously empty |
| A SIGURG is delivered every time new data is anticipated or actually arrives | A SUGURG is delivered only when there is no urgent data already pending |
Miscellaneous
| BSD 4.3 | UnixWare 7 |
|---|---|
| If ls -l is executed on a directory that contains a UNIX domain socket, an ``s'' will be printed on the left side of the mode field | If ls -l is executed on a directory that contains a UNIX domain socket, a ``p'' will be printed on the left side of the mode field |
| Executing ls -F will cause an equals sign (=) to be printed after any filename that represents a UNIX domain socket | Nothing will be printed after a filename that represents a UNIX domain socket |
Programs built for profiling (with cc -p) that use libthread will not work correctly.
file(1) does not correctly recognize Java .class files. If you want to have file(1) correctly identify these files, add the following line to /etc/magic:
0 long 0xbebafeca uxcore:999 Java Class File(The fields in this line must be tab separated.)
The SCOhelp window appears slightly different on SCO UnixWare 2.1.3 than on UnixWare 7. Running /usr/X/bin/scohelp on UnixWare 2.1.3, the button bar is the standard Netscape button bar, not the SCO-specific button bar, and the icon at upper right is the Netscape icon, not the SCO icon. All other SCOhelp functionality remains the same on SCO UnixWare 2.1.3 as it is on UnixWare 7.
The SCOhelp server on UnixWare 2.1.3 may fail to start because of a
permissions problem with the directory
/usr/ns-home/httpd-scohelphttp/logs.
The symptom of this failure is that /usr/X/bin/scohelp
will start, but will fail to reach the SCOhelp server, returning an
error. The workaround is to enter the following commands:
su root
chmod 777 /usr/ns-home/httpd-scohelphttp/logs
/usr/ns-home/httpd-scohelphttp/start
The last command starts the SCOhelp server.
When the UW2compat package is installed, it overwrites some of the native dynamic libraries (for example, /usr/lib/libsocket.so.1). If any of these libraries are later overwritten, for example by installing PTF3280, the new version of the library is not compatible with the UDK. This is not an issue on SCO OpenServer, as the OSRcompat package installs its libraries under /udk.
After installing the UW2compat package on SCO UnixWare 2.1.3, certain
SCO UnixWare desktop administrative commands may fail when invoked by
double clicking on their icons in the desktop. This problem can be
resolved by restoring a filesystem symbolic link changed by
the UW2compat package. Execute the following two commands as
root:
rm /usr/lib/X11
ln -s /usr/X/lib /usr/lib/X11
When installing the Release 7.1.1 UW2compat package on UnixWare 2.1.3,
you may see several
warning: copy relocation size mismatch for symbol svc_fdset
messages on system startup. These messages can safely be ignored.