ibm-information-center/dist/eclipse/plugins/i5OS.ic.rzab6_5.4.0.1/xspawn.htm

116 lines
7.4 KiB
HTML
Raw Normal View History

2024-04-02 14:02:31 +00:00
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="en-us" xml:lang="en-us">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="security" content="public" />
<meta name="Robots" content="index,follow" />
<meta http-equiv="PICS-Label" content='(PICS-1.1 "http://www.icra.org/ratingsv02.html" l gen true r (cz 1 lz 1 nz 1 oz 1 vz 1) "http://www.rsac.org/ratingsv01.html" l gen true r (n 0 s 0 v 0 l 0) "http://www.classify.org/safesurf/" l gen true r (SS~~000 1))' />
<meta name="DC.Type" content="reference" />
<meta name="DC.Title" content="Example: Use the spawn() API to create child processes" />
<meta name="abstract" content="This example shows how a server program can use the spawn() API to create a child process that inherits the socket descriptor from the parent." />
<meta name="description" content="This example shows how a server program can use the spawn() API to create a child process that inherits the socket descriptor from the parent." />
<meta name="DC.Relation" scheme="URI" content="xcodesigns.htm" />
<meta name="DC.Relation" scheme="URI" content="xspwnserver.htm" />
<meta name="DC.Relation" scheme="URI" content="spwnwrkr.htm" />
<meta name="DC.Relation" scheme="URI" content="../apis/spawn.htm" />
<meta name="DC.Relation" scheme="URI" content="../apis/bind.htm" />
<meta name="DC.Relation" scheme="URI" content="../apis/socket.htm" />
<meta name="DC.Relation" scheme="URI" content="../apis/listen.htm" />
<meta name="DC.Relation" scheme="URI" content="../apis/accept.htm" />
<meta name="DC.Relation" scheme="URI" content="../apis/close.htm" />
<meta name="DC.Relation" scheme="URI" content="../apis/send.htm" />
<meta name="DC.Relation" scheme="URI" content="../apis/recv.htm" />
<meta name="copyright" content="(C) Copyright IBM Corporation 2001, 2006" />
<meta name="DC.Rights.Owner" content="(C) Copyright IBM Corporation 2001, 2006" />
<meta name="DC.Format" content="XHTML" />
<meta name="DC.Identifier" content="xspawn" />
<meta name="DC.Language" content="en-us" />
<!-- All rights reserved. Licensed Materials Property of IBM -->
<!-- US Government Users Restricted Rights -->
<!-- Use, duplication or disclosure restricted by -->
<!-- GSA ADP Schedule Contract with IBM Corp. -->
<link rel="stylesheet" type="text/css" href="./ibmdita.css" />
<link rel="stylesheet" type="text/css" href="./ic.css" />
<title>Example: Use the spawn() API to create child processes</title>
</head>
<body id="xspawn"><a name="xspawn"><!-- --></a>
<!-- Java sync-link --><script language="Javascript" src="../rzahg/synch.js" type="text/javascript"></script>
<h1 class="topictitle1">Example: Use the <span class="apiname">spawn()</span> API to create child processes</h1>
<div><p>This example shows how a server program can use the <span class="apiname">spawn()</span> API
to create a child process that inherits the socket descriptor from the parent. </p>
<div class="section"><p>The server job waits for an incoming connection, and then calls <span class="apiname">spawn()</span> to
create children jobs to handle the incoming connection. The child process
inherits the following attributes with the <span class="apiname">spawn()</span> function:
</p>
<ul><li>The socket and file descriptors</li>
<li>The signal mask</li>
<li>The signal action vector</li>
<li>The environment variables</li>
</ul>
<p>The following figure illustrates how the server, worker, and client
jobs interact when the <span class="apiname">spawn()</span> server design is used.</p>
</div>
<div class="section"><br /><img src="rxab6504.gif" alt="Server, worker, and client job interaction when the spawn() server design is used." /><br /></div>
<div class="section"><h4 class="sectiontitle">Flow of socket events: Server that uses <span class="apiname">spawn()</span> to
accept and process requests</h4><p>The following sequence of the socket
calls provides a description of the graphic. It also describes the relationship
between the server and worker examples. Each set of flows contain links to
usage notes on specific APIs. If you need more details on the use of a particular
API, you can use these links. The first example uses the following socket
calls to create a child process with the <span class="apiname">spawn()</span> function
call:</p>
<ol><li>The <span class="apiname">socket()</span> function returns a socket descriptor representing
an endpoint. The statement also identifies that the INET (Internet Protocol)
address family with the TCP transport (SOCK_STREAM) being used for this socket.</li>
<li>After the socket descriptor is created, the <span class="apiname">bind()</span> function
gets a unique name for the socket. </li>
<li>The <span class="apiname">listen()</span> allows the server to accept incoming
client connections. </li>
<li>The server uses the <span class="apiname">accept()</span> function to accept an
incoming connection request. The <span class="apiname">accept()</span> call block indefinitely
waiting for the incoming connection to arrive.</li>
<li>The <span class="apiname">spawn()</span> function initializes the parameters for
a work job to handle incoming requests. In this example, the socket descriptor
for the new connection is mapped over to descriptor 0 in the child program. </li>
<li>In this example, the first <span class="apiname">close()</span> function closes
the listening socket descriptor. The second <span class="apiname">close ()</span> call
ends the accepted socket.</li>
</ol>
</div>
<div class="section"><h4 class="sectiontitle">Socket flow of events: Worker job created by <span class="apiname">spawn()</span></h4><p>The
second example uses the following sequence of function calls:</p>
<ol><li>After the <span class="apiname">spawn()</span> function is called on the server,
the <span class="apiname">recv() </span> function receives the data from the incoming
connection.</li>
<li>The <span class="apiname">send()</span> function echoes data back to the client.</li>
<li>The <span class="apiname">close()</span> function ends the spawned worker job.</li>
</ol>
</div>
</div>
<div>
<ul class="ullinks">
<li class="ulchildlink"><strong><a href="xspwnserver.htm">Example: Create a server that uses spawn()</a></strong><br />
This example shows how to use the <span class="apiname">spawn()</span> API
to create a child process that inherits the socket descriptor from the parent. </li>
<li class="ulchildlink"><strong><a href="spwnwrkr.htm">Example: Enable the worker job to receive a data buffer</a></strong><br />
This example contains the code that enables the worker job to receive a data buffer from the client job and echo it back.</li>
</ul>
<div class="familylinks">
<div class="parentlink"><strong>Parent topic:</strong> <a href="xcodesigns.htm" title="There are a number of ways that you can design a connection-oriented socket server on the iSeries. These example programs can be used to create your own connection-oriented designs.">Examples: Connection-oriented designs</a></div>
</div>
<div class="relinfo"><strong>Related information</strong><br />
<div><a href="../apis/spawn.htm">spawn()</a></div>
<div><a href="../apis/bind.htm">bind()</a></div>
<div><a href="../apis/socket.htm">socket()</a></div>
<div><a href="../apis/listen.htm">listen()</a></div>
<div><a href="../apis/accept.htm">accept()</a></div>
<div><a href="../apis/close.htm">close()</a></div>
<div><a href="../apis/send.htm">send()</a></div>
<div><a href="../apis/recv.htm">recv()</a></div>
</div>
</div>
</body>
</html>