Open System Services Porting Guide (G06.24+, H06.03+)
Table Of Contents
- What’s New in This Manual
- About This Manual
- 1 Introduction to Porting
- 2 The Development Environment
- 3 Useful Porting Tools
- 4 Interoperating Between User Environments
- Purpose of Interoperability
- The OSS User Environment
- OSS Commands for the Guardian User
- Guardian Commands for the UNIX User
- OSS Pathname and Guardian Filename Conversions
- Running the OSS Shell and Commands From TACL
- Running Guardian Commands From the OSS Shell
- Running OSS Processes With Guardian Attributes
- Using OSS Commands to Manage Guardian Objects
- 5 Interoperating Between Programming Environments
- 6 OSS Porting Considerations
- 7 Porting UNIX Applications to the OSS Environment
- 8 Migrating Guardian Applications to the OSS Environment
- General Migration Guidelines
- C Compiler Issues for Guardian Programs
- Using New and Extended Guardian Procedures
- Using OSS Functions in a Guardian Program
- Interoperating With OSS Programs
- Starting an OSS Program From the Guardian Environment
- C Compiler Considerations for OSS Programs
- Porting a Guardian Program to the OSS Environment
- How Arguments Are Passed to the C or C++ Program
- Differences in the Two Run-Time Environments
- Which Run-Time Routines Are Available
- Use of Common Run-Time Environment (CRE) Functions
- Replacing Guardian Procedure Calls With Equivalent OSS Functions
- Which IPC Mechanisms Can Be Used
- Interactions Between Guardian and OSS Functions
- 9 Porting From Specific UNIX Systems
- 10 Native Migration Overview
- 11 Porting or Migrating Sockets Applications
- 12 Porting Threaded Applications
- A Equivalent OSS and UNIX Commands for Guardian Users
- B Equivalent Guardian Commands for OSS and UNIX Users
- C Equivalent Inspect Debugging Commands for dbx Commands
- D Equivalent Native Inspect Debugging Commands for dbx Commands
- E Standard POSIX Threads Functions: Differences Between the Previous and Current Standards
- Glossary
- Index
Porting or Migrating Sockets Applications
Open System Services Porting Guide—520573-006
11-3
Porting Situations
°
socket_transport_name_get(), which an application can call to retrieve
the name of the transport provider process being used.
•
OSS sockets can return the following error codes that are not BSD error codes:
•
In the OSS environment, the ECONNRESET error code is returned when an attempt
is made to use a socket whose transport provider process has stopped running.
•
OSS sockets use the fcntl() function with the O_NONBLOCK flag to mark a
socket as nonblocking. BSD sockets use the fcntl() function with the FNDELAY
flag for this purpose.
•
OSS sockets support capture of the SIGURG signal. BSD sockets support capture
of the SIGURG and SIGIO signals.
In the OSS environment, the SIGURG signal is enabled by using the fcntl()
function to invoke the F_SETOWN command. In a BSD environment, SIGURG is
enabled using the fcntl() function to invoke the FASYNC command.
•
The OSS API does not provide the poll() function:
The OSS API provides the select() function and the Guardian API provides the
FILE_COMPLETE_ procedure; either can be used in place of the poll() function.
•
The OSS API does not currently support raw sockets.
Porting Situations
You need to consider four different porting situations when porting UNIX programs that
use BSD sockets to the OSS environment:
•
Blocking socket I/O
Programs using blocking socket input/output can generally be ported to the OSS
environment with minimal changes, provided the General Considerations on
page 11-1 are observed.
•
Blocking socket I/O with fork() and exec set of functions
Programs using blocking socket input/output with fork() and the exec set of
functions should be portable with no changes. However, you might wish to
consider the performance impact of using dynamic servers, static servers, or
persistent processes when porting. Static and persistent servers and other
performance considerations when processing requests are discussed in Porting
Servers and Demons on page 6-23.
•
Nonblocking socket I/O
ETANOTRUNNING Returned when an attempt is made to create a socket
without a transport agent process running on that
processor.
ENOENT Returned when an attempt is made to create a socket
without a transport provider process running.