HP 3000 Manuals

Creating Remote Processes [ Net IPC 3000/XL Programmer's Reference Manual ] MPE/iX 5.0 Documentation


Net IPC 3000/XL Programmer's Reference Manual

Creating Remote Processes 

With PTOP, the creation of the slave process and the set up of the
communications channel is done by the  POPEN call in the master and the
first  GET and ACCEPT (or  REJECT) calls in the slave.  The  POPEN call
specifies the remote node's location, the name of the program on the
remote node to be created, and various process-creation parameters.  The  
dsnum parameter returned by  POPEN identifies the slave process and its
communications channel.  On the slave side, the GET and  ACCEPT calls
complete the set up.

With NetIPC and RPM, the actions of creating the slave process and
setting up the communications channel are split up.  RPM handles the
process creation, while NetIPC handles the communications.  The calls
necessary for these tasks are more complicated than the POPEN and
GET/ACCEPT calls.  The master process creates a call socket and registers
it in the local socket registry.  It passes the name of the socket and
the local node name to the slave by using the RPM string feature of
RPMCREATE. The master calls RPMCREATE to create the slave, including any
process-creation parameters.  The slave retrieves the master socket and
node names from the RPM strings.  It creates its own socket, looks up the
master's socket, and establishes a virtual-circuit connection between the
two sockets.  The steps for each side are given below.

Creating Remote Processes:  In the Master Program 

To convert the PTOP intrinsic listed below, perform the following steps.

Syntax 
______________________________________________________________________
|                                                                    |
|                                                                    |
|     dsnum := POPEN ( location,progname [, itag][, entryname]       |
|     [, param][, flags][,stacksize][, dlsize][, maxdata][ ,bufsize])|
|                                                                    |
______________________________________________________________________

 *  Get the local node name.  You can use the NSINFO intrinsic, provided
    that you execute a DSLINE or a  REMOTE command prior to the call.
    This should normally be the case for a PTOP application.  You can use
    local node name and length item numbers (19 and 18) in NSINFO.

    ____________________________________________________________________ 

    NOTE   NSINFO is supported on NS3000/V starting with UB-delta-1 MIT
          and on NS3000/XL with Release 1.1.)

    ____________________________________________________________________ 

 *  Create a TCP call socket for the master program and name the socket,
    using the  IPCCREATE and IPCNAME intrinsics.  You can use a randomly
    generated name from  IPCNAME.

 *  Build the opt array for the  RPMCREATE call, using the  INITOPT and
    ADDOPT intrinsics.  In the opt array, include RPM strings (opt code
    20000) for the socket name and the local node name.  (These will be
    used by the slave program to set up the virtual circuit connection.)
    If any process-creation options are included in the POPEN call (
    entryname, param, flags, stacksize, dlsize or  maxdata), include them
    in the opt array with the corresponding RPM opt codes:

---------------------------------------------------------------------------------------------
|                                             |                                             |
| Parameter                                   | Opt Code                                    |
|                                             |                                             |
---------------------------------------------------------------------------------------------
|                                             |                                             |
| entry name                                  | 22001                                       |
|                                             |                                             |
|                                                                                           |
|                                             |                                             |
| param                                       | 22002                                       |
|                                             |                                             |
|                                                                                           |
|                                             |                                             |
| flags                                       | 22003                                       |
|                                             |                                             |
|                                                                                           |
|                                             |                                             |
| stacksize                                   | 22004                                       |
|                                             |                                             |
|                                                                                           |
|                                             |                                             |
| dlsize                                      | 22005                                       |
|                                             |                                             |
|                                                                                           |
|                                             |                                             |
| maxdata                                     | 22006                                       |
|                                             |                                             |
---------------------------------------------------------------------------------------------

     *  Call  RPMCREATE to create the slave process on the remote node.
        Use the  progname and  location parameters as they appear in the
        POPEN call, although you will have to supply the (byte) lengths
        of progname and location.  You should set the dependent bit of
        the  flag parameter, so the slave will terminate if the master
        does.  Save the program descriptor, returned by RPMCREATE, for a
        future  RPMKILL.

        ________________________________________________________________ 

        NOTE   RPMCREATE requires the program to be linked with Process
              Handling (PH) capability.  PTOP does not require PH
              capability.

        ________________________________________________________________ 

 *  Call  IPCRECVCN to wait for the connection request from the slave.
    Save the returned virtual-circuit descriptor for subsequent  IPCSEND
    and IPCRECV calls.

 *  Now that the virtual-circuit connection has been set up, call
    IPCSHUTDOWN to delete the master's call socket and IPCNAMERASE to
    delete the socket name.

 *  If a tag is specified, call  IPCSEND to send the tag on the virtual
    circuit to the slave.

 *  If the slave could respond to the  POPEN with either an  ACCEPT or a
    REJECT, call  IPCRECV to receive a one-byte accept or reject
    indication from the slave.

 *  If a tag is specified, call  IPCRECV to receive the tag from the
    slave (but see the comment on IPCRECV under "Exchanging Data").

Creating Remote Processes:  In the Slave Program 

To convert the PTOP intrinsic listed below, perform the following steps.

Syntax 
_____________________________________________
|                                           |
|                                           |
|      ifun := GET [([ itag][ il][,ionumber]|
|                                           |
_____________________________________________

 *  Call  RPMGETSTRING twice to get the master's socket name and node
    name.

 *  Create a TCP call socket by using the IPCCREATE intrinsic.

 *  Call  IPCLOOKUP to look up the master's socket, using the master
    socket name and node name passed in the RPM strings.  This returns a
    destination descriptor to be used in the IPCCONNECT call.

 *  Set up a virtual-circuit connection between the master and the slave
    sockets, using  IPCCONNECT. Call IPCRECV to wait for the connection
    acknowledgement from the slave.  Save the returned virtual-circuit
    descriptor for subsequent  IPCSEND and IPCRECV calls.

 *  After setting up the connection, delete the call socket and
    destination descriptor using  IPCSHUTDOWN.

 *  If a tag is specified, call  IPCRECV to receive the master's tag on
    the virtual circuit (see the comment on IPCRECV under Data Exchange).

To convert the PTOP intrinsic listed below, perform the following steps.

Syntax 
_____________________________________________
|                                           |
|                                           |
|     ACCEPT [([ itag][, target][, tcount])]|
|                                           |
_____________________________________________

 *  If the slave can call either  ACCEPT or REJECT in response to the
    POPEN, send a one byte accept or reject indication on the virtual
    circuit to the master.

 *  If a tag is specified, call  IPCSEND to send the slave's tag on the
    virtual circuit back to the master.



MPE/iX 5.0 Documentation