![]() Chapter Contents  | 
![]() Previous  | 
![]() Next  | 
| Porting UNIX Socket Applications to the SAS/C Environment | 
One
of the greatest hurdles to overcome in porting some BSD socket programs is
their dependence on BSD kernel routines, such as 
fork
, that are not supported by the SAS/C Compiler (except under USS
OS/390). This level of dependency is greatest in BSD daemon programs called
from INETD, the UNIX TCP/IP daemon.
fork
 | 
In the UNIX operating system, the 
fork
 system call creates another
process with an identical address space.  This process enables sockets to
be shared between parent and child processes. The 
fork
 function is available under USS, and UNIX socket behavior occurs
if integrated sockets are specified. However, creating an identical address
space this way is not possible under traditional OS/390 or CMS, although the 
ATTACH
 macro may be used under
OS/390 to achieve similar results.  | 
exec
 | 
Under UNIX, the 
exec
 system call loads a program from an ordinary,
executable file onto the current process, replacing the current program. With
USS, the 
exec
 family of
functions may be used to create a process, and the UNIX socket behavior occurs
if integrated sockets are specified. Under traditional OS/390 or CMS, the
ISO/ANSI C 
system
 function
sometimes can be used as an alternative to the 
exec
 routine, but the semantics and effects are different. | 
dup
,
dup2
 | 
Unlike UNIX style I/O, standard I/O
is the most efficient and lowest level form of I/O under OS/390 and CMS because
of the implementation-defined semantics of ISO/ANSI C. The looser semantics
place standard I/O closer to native OS/390 and CMS I/O than to UNIX style
I/O. The inverted relationship between UNIX style I/O and standard I/O inhibits 
dup
 implementation under traditional
OS/390 and CMS. However, with USS, 
dup
 and 
dup2
 are
available, and UNIX socket behavior occurs if integrated sockets are specified. | 
socketpair
, 
pipe
 | 
The socket pair and pipe calls are
not useful without the 
fork
system call. | 
dup
 call has been issued to correspond to the 
stdin
, 
stdout
, and 
stderr
file pointers. This correspondence relies on the way the 
fork
 system call handles file descriptors.
System programs that involve the INETD daemon must be
redesigned for OS/390 or CMS.  The SAS/C Library provides the 
givesocket
, 
takesocket
, and 
getclientid
 functions to allow a socket to be passed between cooperating processes
in the absence of the 
fork
system call.  Refer to Socket Function Reference for
more information on these functions.
![]() Chapter Contents  | 
![]() Previous  | 
![]() Next  | 
![]() Top of Page  | 
Copyright © 2001 by SAS Institute Inc., Cary, NC, USA. All rights reserved.