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

117 lines
7.4 KiB
HTML

<?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="Examples: Use multiple accept() APIs to handle incoming requests" />
<meta name="abstract" content="These examples show how to design a server program that uses the multiple accept() model for handling incoming connection requests." />
<meta name="description" content="These examples show how to design a server program that uses the multiple accept() model for handling incoming connection requests." />
<meta name="DC.Relation" scheme="URI" content="xcodesigns.htm" />
<meta name="DC.Relation" scheme="URI" content="x1mulitaccept.htm" />
<meta name="DC.Relation" scheme="URI" content="xmultiworker.htm" />
<meta name="DC.Relation" scheme="URI" content="generic.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/close.htm" />
<meta name="DC.Relation" scheme="URI" content="../apis/accept.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="xmultiaccept" />
<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>Examples: Use multiple accept() APIs to handle incoming
requests</title>
</head>
<body id="xmultiaccept"><a name="xmultiaccept"><!-- --></a>
<!-- Java sync-link --><script language="Javascript" src="../rzahg/synch.js" type="text/javascript"></script>
<h1 class="topictitle1">Examples: Use multiple <span class="apiname">accept()</span> APIs to handle incoming
requests</h1>
<div><p>These examples show how to design a server program that uses the
multiple <span class="apiname">accept()</span> model for handling incoming connection
requests.</p>
<div class="section"><p>When the multiple <span class="apiname">accept()</span> server starts up,
it does a <span class="apiname">socket()</span>, <span class="apiname">bind()</span>, and <span class="apiname">listen()</span> as
normal. It then creates a pool of worker jobs and gives each worker job the
listening socket. Each multiple <span class="apiname">accept()</span> worker then calls <span class="apiname">accept()</span>.</p>
</div>
<div class="section"><p>The following figure illustrates how the server, worker, and client
jobs interact when the system uses the multiple <span class="apiname">accept()</span> server
design.</p>
</div>
<div class="section"><p><br /><img src="rxab6506.gif" alt="Server, worker, and client job interaction when you use the multiple accept() server design" /><br /></p>
</div>
<div class="section"><h4 class="sectiontitle">Flow of socket events: Server that creates a pool of multiple
accept() worker jobs</h4><p>The following sequence of the socket calls
provides a description of the figure. 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:</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) is 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 <span class="apiname">spawn()</span> function creates each of the worker jobs. </li>
<li>In this example, the first <span class="apiname">close()</span> function closes
the listening socket.</li>
</ol>
</div>
<div class="section"><h4 class="sectiontitle">Socket flow of events: Worker job that multiple accept()</h4><p>The
second example uses the following sequence of function calls:</p>
<ol><li>After the server has spawned the worker jobs, the listen socket descriptor
is passed to this worker job as a command line parameter. The <span class="apiname">accept()</span> function
waits for an incoming client connection.</li>
<li>The <span class="apiname">recv()</span> function receives a message from the client.
</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 worker job.</li>
</ol>
</div>
</div>
<div>
<ul class="ullinks">
<li class="ulchildlink"><strong><a href="x1mulitaccept.htm">Example: Server program to create a pool of multiple accept() worker jobs</a></strong><br />
This example shows how to use the multiple <span class="apiname">accept()</span> model
to create a pool of worker jobs.</li>
<li class="ulchildlink"><strong><a href="xmultiworker.htm">Example: Worker jobs for multiple accept()</a></strong><br />
This example shows how multiple <span class="apiname">accept()</span> APIs
receive the worker jobs and call the <span class="apiname">accept()</span> server.</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="relref"><strong>Related reference</strong><br />
<div><a href="generic.htm" title="This code example contains the code for a common client job.">Example: Generic client</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/close.htm">close()</a></div>
<div><a href="../apis/accept.htm">accept()</a></div>
<div><a href="../apis/send.htm">send()</a></div>
<div><a href="../apis/recv.htm">recv()</a></div>
</div>
</div>
</body>
</html>