ibm-information-center/dist/eclipse/plugins/i5OS.ic.apis_5.4.0.1/waitforiocompletion.htm

967 lines
23 KiB
HTML
Raw Normal View History

2024-04-02 14:02:31 +00:00
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Copyright" content="Copyright (c) 2006 by IBM Corporation">
<title>QsoWaitForIOCompletion()--Wait for I/O Operation</title>
<!-- Begin Header Records -->
<!-- Created by Steve Simonson for V5R1-->
<!-- 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. -->
<!--End Header Records -->
<!-- Edited by Kersten Feb 02 -->
<link rel="stylesheet" type="text/css" href="../rzahg/ic.css">
</head>
<body>
<!-- Java sync-link -->
<script type="text/javascript" language="Javascript" src="../rzahg/synch.js">
</script>
<a name="Top_Of_Page"></a>
<h2>QsoWaitForIOCompletion()--Wait for I/O Operation</h2>
<div class="box" style="width: 65%;">
<br>
&nbsp;&nbsp;Syntax
<pre>
#include &lt;gskssl.n&gt;
#include &lt;qsoasync.h
int <em>QsoWaitForIOCompletion</em> (int IOCompletionPort,
Qso_OverlappedIO_t * completionStatus,
struct timeval * timeToWait)
</pre>
<br>
&nbsp;&nbsp;Service Program Name: QSOSRV3<br>
<!-- iddvc RMBR -->
<br>
&nbsp;&nbsp;Default Public Authority: *USE<br>
<!-- iddvc RMBR -->
<br>
&nbsp;&nbsp;Threadsafe: Yes<br>
<!-- iddvc RMBR -->
<br>
</div>
<p>The QsoWaitForIOCompletion() is used to wait for a completed overlapped I/O
operation. The wait point is represented by the I/O completion port that was
created using the <em>QsoCreateIOCompletionPort()</em> function.</p>
<br>
<h3>Parameters</h3>
<dl>
<dt><strong>int IOCompletionPort</strong></dt>
<dd>(Input) The I/O completion port on which to wait.<br>
<br>
</dd>
<dt><strong>Qso_OverlappedIO_t * completionStatus</strong></dt>
<dd>(Input/Output) A pointer to a qso_overlappedIO_t structure that will be
updated with the status defined below. If a field has no relevance to
operation completed, then either a null or zero will be returned for that
field.<br>
<br>
<table cellpadding="5">
<!-- cols="20 80" -->
<tr>
<td align="left" valign="top"><em>descriptorHandle</em></td>
<td align="left" valign="top">(Ouput) The descriptor handle that was supplied
by the application when the operation was started.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>buffer</em></td>
<td align="left" valign="top">(Ouput) A pointer to the buffer that was supplied
when the operation was started. Null is returned when operationCompleted is
QSOSTARTACCEPT or
GSKSECURESOCSTARTINIT .<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>bufferLength</em></td>
<td align="left" valign="top">(Ouput) The length of the buffer that was
supplied when the operation was started. Zero is returned when
operationCompleted is QSOSTARTACCEPT or GSKSECURESOCSTARTINIT.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>postFlag</em></td>
<td align="left" valign="top">(Ouput) The value of the postFlag when the
operation was started. Zero is returned when operationCompleted is
QSOSTARTACCEPT or
GSKSECURESOCSTARTINIT .<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>fillBuffer</em></td>
<td align="left" valign="top">(Ouput) The value of the fillBuffer when the
operation was started. Zero is returned when operationCompleted is
QSOSTARTACCEPT or
GSKSECURESOCSTARTINIT .<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>returnValue</em></td>
<td align="left" valign="top">(Output)
<p>Possible values if operation completed is QSOPOSTIOCOMPLETION, QSOSTARTRECV, QSOSTARTSEND, or QSOSTARTACCEPT:</p>
<br>
<table cellpadding="5">
<tr>
<td align="left" valign="top" nowrap><em>-1</em></td>
<td align="left" valign="top">The operation failed and errnoValue field should
be checked for further explanation of the error.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top" nowrap><em>&gt;= 0</em></td>
<td align="left" valign="top">For both QSOSTARTRECV and QSOSTARTSEND, indicates
the number of bytes sent or received respectively. A return value of 0 on a
receive indicates an end-of-file condition. For QSOSTARTACCEPT, this field is
the socket connection descriptor. For QSOPOSTIOCOMPLETION, a return value of 0 indicates the
operation was not timed (<em>operationWaitTime</em> was zero on input).
QSOPOSTIOCOMPLETION will not return &gt; 0.<br>
<br>
</td>
</tr>
</table>
<p>Possible values if operation completed is GSKSECURESOCSTARTSEND or
GSKSECURESOCSTARTRECV:</p>
<br>
<table cellpadding="5">
<tr>
<td align="left" valign="top"><em>GSK_OK</em></td>
<td align="left" valign="top">Operation was successful. Field
secureDataTransferSize indicates the number of bytes sent or received
respectively.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>Failure</em></td>
<td align="left" valign="top"><br>
</td>
</tr>
</table>
<br>
<p>Possible values common to GSKSECURESOCSTARTSEND and GSKSECURESOCSTARTRECV:</p>
<table cellpadding="5">
<tr>
<td align="left" valign="top"><em>[GSK_AS400_ERROR_INVALID_POINTER]</em></td>
<td align="left" valign="top">The buffer pointer located in the
Qso_OverLappedIO_t is not valid.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>[GSK_INTERNAL_ERROR]</em></td>
<td align="left" valign="top">An unexpected error occurred during SSL
processing.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>[GSK_AS400_ERROR_CLOSED]</em></td>
<td align="left" valign="top">Secure session was closed by a thread during SSL
processing.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>[GSK_ERROR_IO]</em></td>
<td align="left" valign="top">An error occurred in SSL processing; check the
errno value.</td>
</tr>
<tr>
<td align="left" valign="top"><em>[GSK_ERROR_SOCKET_CLOSED]</em></td>
<td align="left" valign="top">A <strong>close()</strong> was done on the socket
descriptor for this secure session.</td>
</tr>
</table>
<br>
<p>Values unique to GSKSECURESOCSTARTRECV:</p>
<br>
<table cellpadding="5">
<tr>
<td align="left" valign="top"><em>[GSK_INVALID_HANDLE]</em></td>
<td align="left" valign="top">The handle specified was not valid.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>[GSK_INVALID_STATE]</em></td>
<td align="left" valign="top">The handle is not in the correct state for this
operation.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>[GSK_ERROR_BAD_MESSAGE]</em></td>
<td align="left" valign="top">SSL received a badly formatted message.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>[GSK_ERROR_BAD_MAC]</em></td>
<td align="left" valign="top">A bad message authentication code was
received.</td>
</tr>
</table>
<br>
<p>Possible values if
operationCompleted is GSKSECURESOCSTARTINIT:</p>
<br>
<table cellpadding="5">
<tr>
<td align="left" valign="top"><em>[GSK_OK]</em></td>
<td align="left" valign="top">Operation was successful, a secure session
established.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>[GSK_ERROR_BAD_MESSAGE]</em></td>
<td align="left" valign="top">SSL received a badly formatted message.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>[GSK_ERROR_BAD_MAC]</em></td>
<td align="left" valign="top">A bad message authentication code was
received.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>[GSK_KEYRING_OPEN_ERROR]</em></td>
<td align="left" valign="top">Certificate store file could not be opened.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>[GSK_ERROR_BAD_KEYFILE_LABEL]</em></td>
<td align="left" valign="top">The specified certificate store label is not
valid.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>[GSK_ERROR_BAD_V3_CIPHER]</em></td>
<td align="left" valign="top">An SSLV3 or TLSV1 cipher suite was specified that
is not valid.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>[GSK_ERROR_BAD_V2_CIPHER]</em></td>
<td align="left" valign="top">An SSLV2 cipher suite was specified that is not
valid.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>[GSK_ERROR_NO_CIPHERS]</em></td>
<td align="left" valign="top">No ciphers available or no ciphers were
specified.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>[GSK_ERROR_NO_CERTIFICATE]</em></td>
<td align="left" valign="top">No certificate is available for SSL
processing.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>[GSK_ERROR_BAD_CERTIFICATE]</em></td>
<td align="left" valign="top">The certificate is bad.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>[SSL_ERROR_NOT_TRUSTED_ROOT]</em></td>
<td align="left" valign="top">The certificate is not signed by a trusted
certificate authority.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>[GSK_KEYFILE_CERT_EXPIRED]</em></td>
<td align="left" valign="top">The validity time period of the certificate has
expired.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>[GSK_ERROR_BAD_MESSAGE]</em></td>
<td align="left" valign="top">A badly formatted message was received.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>[GSK_ERROR_UNSUPPORTED]</em></td>
<td align="left" valign="top">Operation is not supported by SSL.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>[GSK_ERROR_BAD_PEER]</em></td>
<td align="left" valign="top">The peer system is not recognized.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>[GSK_ERROR_CLOSED]</em></td>
<td align="left" valign="top">The SSL session ended.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>[GSK_AS400_ERROR_TIMED_OUT]</em></td>
<td align="left" valign="top">The value specified for the handshake timeout
expired before the handshake completed.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>[GSK_INSUFFICIENT_STORAGE]</em></td>
<td align="left" valign="top">Unable to allocate storage for the requested
operation.
<br>
</td>
</tr>
</table>
</td>
</tr>
</table>
</dd>
<dt><strong>errnoValue</strong></dt>
<dd>(Output) If operationCompleted is <strong>QSOPOSTIOCOMPLETION</strong>, <strong>QSOSTARTSEND</strong>,
<strong>QSOSTARTRECV</strong> or <strong>QSOSTARTACCEPT</strong> and
returnValue is negative, this field will contain an errno value further
defining the error. This is also true if operationCompleted is
<strong>GSKSECURESOCSTARTSEND</strong> or
<strong>GSKSECURESOCSTARTRECV</strong> and returnValue is GSK_ERROR_IO.
<p>Possible values are:</p>
<p> <strong>If
operationCompleted is QSOPOSTIOCOMPLETION:</strong></p>
<table cellpadding="5">
<!-- cols="15 85" -->
<tr>
<td align="left" valign="top"><em>[EAGAIN]</em></td>
<td align="left" valign="top">The specified timer value expired.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>[ECLOSED]</em></td>
<td align="left" valign="top">The socket descriptor was closed before the timer
expired.</td>
</tr>
</table>
<p><strong>If operationCompleted is QSOSTARTRECV or
GSKSECURESOCSTARTRECV:</strong></p>
<table cellpadding="5">
<!-- cols="20 80" -->
<tr>
<td align="left" valign="top"><em>[EAGAIN]</em></td>
<td align="left" valign="top">The operation did not complete in the specified
time.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>[EIO]</em></td>
<td align="left" valign="top">Input/output error.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>[ECONNABORTED]</em></td>
<td align="left" valign="top">Connection ended abnormally.
<p>This error code indicates that the transport provider ended the connection
abnormally because of one of the following:</p>
<ul>
<li>The retransmission limit has been reached for the data that was being sent
on the socket.</li>
<li>A protocol error was detected.</li>
</ul>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>[ECONNRESET]</em></td>
<td align="left" valign="top">A connection with a remote socket was reset by
that socket.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>[ECLOSED]</em></td>
<td align="left" valign="top">Connection was closed. Only valid for
QSOSTARTRECV.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>[EFAULT]</em></td>
<td align="left" valign="top">Read buffer pointer not valid.</td>
</tr>
</table>
<p><strong>If operationCompleted is QSOSTARTSEND or
GSKSECURESOCSTARTSEND:</strong></p>
<table cellpadding="5">
<!-- cols="20 80" -->
<tr>
<td align="left" valign="top"><em>[EAGAIN]</em></td>
<td align="left" valign="top">The operation did not complete in the specified
time.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>[EIO]</em></td>
<td align="left" valign="top">Input/output error.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>[EPIPE]</em></td>
<td align="left" valign="top">Broken pipe.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>[ECLOSED]</em></td>
<td align="left" valign="top">Connection was closed. Only valid for
QSOSTARTSEND<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>[EFAULT]</em></td>
<td align="left" valign="top">Send buffer pointer not valid.</td>
</tr>
</table>
<p><strong>If operationCompleted is QSOSTARTACCEPT:</strong></p>
<table cellpadding="5">
<!-- cols="20 80" -->
<tr>
<td align="left" valign="top"><em>[EAGAIN]</em></td>
<td align="left" valign="top">The operation did not complete in the specified
time.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>[ECONNABORTED]</em></td>
<td align="left" valign="top">Connection ended abnormally.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>[ECLOSED]</em></td>
<td align="left" valign="top">Listening socket closed.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>[EIO]</em></td>
<td align="left" valign="top">Input/output error.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>[EMFILE]</em></td>
<td align="left" valign="top">Too many descriptors for this process.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>[ENFILE]</em></td>
<td align="left" valign="top">Too many descriptors in system.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>[ENOBUFS]</em></td>
<td align="left" valign="top">There is not enough buffer space for the
requested operation.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>[EUNKNOWN]</em></td>
<td align="left" valign="top">Unknown system state.</td>
</tr>
</table>
<p><strong>If operationCompleted
is GSKSECURESOCSTARTINIT:</strong></p>
<table cellpadding="5">
<!-- cols="20 80" -->
<tr>
<td align="left" valign="top"><em>[ECONNABORTED]</em></td>
<td align="left" valign="top">Connection ended abnormally.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>[EDEADLK]</em></td>
<td align="left" valign="top">Resource deadlock avoided.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>[EINTR]</em></td>
<td align="left" valign="top">Interrupted function call.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>[EIO]</em></td>
<td align="left" valign="top">Input/output error.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>[ETERM]</em></td>
<td align="left" valign="top">Operation terminated.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>[EUNATCH]</em></td>
<td align="left" valign="top">The protocol required to support the specified
address family is not available at this time.</td>
</tr>
</table>
<p> Any <em>errno</em> that can
be returned by <strong>send()</strong> or <strong>recv()</strong> can be
returned by this API if operationCompleted is
<strong>GSKSECURESOCSTARTINIT</strong>. See <a href="unix8.htm">Sockets
APIs</a> for a description of the <em>errno</em> values they return.</p>
<p>If an <em>errno</em> is returned that is not in this list, see <a href=
"unix14.htm">Errno Values for UNIX-Type Functions</a> for a description of the
<em>errno</em>.</p>
<table cellpadding="5">
<!-- cols="20 80" -->
<tr>
<td align="left" valign="top"><em>secureDataTransferSize</em></td>
<td align="left" valign="top">(Output) Number of bytes received or sent if
operationCompleted is GSKSECURESOCSTARTRECV or GSKSECURESOCSTARTSEND
respectively and returnValue equals GSK_OK.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>bytesAvailable</em></td>
<td align="left" valign="top">(Output) Number of bytes available to be read
from connection. This parameter is valid only if operationCompleted is
QSOSTARTACCEPT and returnValue is &gt;= 0.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>operationWaitTime</em></td>
<td align="left" valign="top">(Ouput) The value of the operationWaitTime when
the operation was started.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>postedDescriptor</em></td>
<td align="left" valign="top">(Ouput) Always set to negative one. This field is
only used on input for QsoPostIOCompletion(). When the operation is retrieved
with QsoWaitForIOCompletion(), the <em>descriptorHandle</em> should be used to
identify the socket connection and not this field.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>operationCompleted</em></td>
<td align="left" valign="top">(Output) The operation that was started and has
now completed.<br>
<br>
<ul type="square">
<li>1 (QSOSTARTSEND)</li>
<li>2 (QSOSTARTRECV)</li>
<li>3 (QSOPOSTIOCOMPLETION)</li>
<li>4 (GSKSECURESOCSTARTSEND)</li>
<li>5 (GSKSECURESOCSTARTRECV)</li>
<li>6 (QSOSTARTACCEPT)</li>
<li>7 (GSKSECURESOCSTARTINIT)
</li>
</ul>
<br>
</td>
</tr>
</table>
</dd>
<dt><strong>struct timeval * timeToWait</strong></dt>
<dd>(Input) A pointer to a timeval structure that contains the time in seconds
and microseconds for which the QsoWaitForIOCompletion() call should block if
there is no completion status to receive.</dd>
<dd>
<p>If this parameter is null, QsoWaitForIOCompletion() waits indefinitely. If
this value is specified, and 0 seconds 0 microseconds are specified,
QsoWaitForIOCompletion() returns immediately.</p>
</dd>
</dl>
<br>
<h3>Authorities</h3>
<p> Authorization of *R (allow
access to the object) to the certificate store file and its associated files is
required. Authorization of *X (allow use of the object) to each directory of
the path name of the certificate store file and its associated files is
required.</p>
<br>
<h3>Return Values</h3>
<p>QsoWaitForIOCompletion returns an integer. Possible value are:</p>
<table cellpadding="5">
<!-- cols="5 95" -->
<tr>
<td align="left" valign="top"><em>1</em></td>
<td align="left" valign="top">Completion of an overlapped I/O function has been
returned.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>-1</em></td>
<td align="left" valign="top">The QsoWaitForIOCompletion() function timed out
or an error occurred. Errno value has been set.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>0</em></td>
<td align="left" valign="top">If the QsoWaitForIOCompletion() function is
issued with a timeToWait parameter that specifies 0 seconds 0 microseconds and
there is no completion status to report, the function returns immediately with
a return value of zero.</td>
</tr>
</table>
<br>
<br>
<h3>Errno Conditions</h3>
<p>When QsoWaitForIOCompletion fails, errno can be set to one of the
following:</p>
<table cellpadding="5">
<!-- cols="20 80" -->
<tr>
<td align="left" valign="top"><em>[ETIME]</em></td>
<td align="left" valign="top">The function has blocked for the time period
specified and has no completion status to report.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>[EFAULT]</em></td>
<td align="left" valign="top">Bad address. The system detected a bad address
while attempting to access the completionStatus or the timeToWait
parameter.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>[EDESTROYED]</em></td>
<td align="left" valign="top">The I/O completion port has been destroyed.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>[EINVAL]</em></td>
<td align="left" valign="top">The value of the I/O completion port is not valid
or the timeToWait parameter is not valid.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>[EINTR]</em></td>
<td align="left" valign="top">Interrupted function call.<br>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>[EUNKNOWN]</em></td>
<td align="left" valign="top">Unknown system state.</td>
</tr>
</table>
<br>
<br>
<h3>Error Messages</h3>
<table width="100%" cellpadding="5">
<!-- cols="25 75" -->
<tr>
<th align="left" valign="top">Message ID</th>
<th align="left" valign="top">Error Message Text</th>
</tr>
<tr>
<td width="15%" valign="top">CPFA081 E</td>
<td width="85%" valign="top">Unable to set return value or error code.</td>
</tr>
<tr>
<td align="left" valign="top">CPE3418 E</td>
<td align="left" valign="top">Possible APAR condition or hardware failure.</td>
</tr>
<tr>
<td align="left" valign="top">CPF9872 E</td>
<td align="left" valign="top">Program or service program &amp;1 in library
&amp;2 ended. Reason code &amp;3.</td>
</tr>
</table>
<br>
<br>
<h3>Usage Notes</h3>
<ol>
<li>An errno of EDESTROYED indicates that the thread was waiting on the I/O
completion port at the time that it was destroyed by another thread. When an
I/O completion port is destroyed, all buffers that are associated with
outstanding overlapped I/O operations are immediately available for use by the
application program.<br>
<br>
</li>
<li>The application should first check the return value of the
<em>QsoWaitForIOCompletion()</em> call to determine if the Qso_OverlappedIO_t
structure specified by the completionStatus parameter has been updated. This
structure is updated ONLY if the return value of the
<em>QsoWaitForIOCompletion()</em> call is one (1).</li>
</ol>
<br>
<h3>Related Information</h3>
<ul>
<li><a href="createiocompletionport.htm">QsoCreateIOCompletionPort()</a>--Create
I/O Completion Port<br>
<br>
</li>
<li><a href="destroyiocompletionport.htm">QsoDestroyIOCompletionPort()</a>--Create
I/O Completion Port<br>
<br>
</li>
<li><a href="postiocompletion.htm">QsoPostIOCompletionPort()</a>--Post Request on
I/O Completion Port<br>
<br>
</li>
<li><a href="startaccept.htm">QsoStartAccept()</a>--Start asynchronous accept
operation<br>
<br>
</li>
<li><a href="startrecv.htm">QsoStartRecv()</a>--Start Asynchronous Recv
Operation<br>
<br>
</li>
<li><a href="startsend.htm">QsoStartSend()</a>--Start Asynchronous Send
Operation<br>
<br>
</li>
<li><a href="gskstartrecv.htm">gsk_secure_soc_startRecv()</a>--Start Asynchronous
Receive Operation on a Secure Session<br>
<br>
</li>
<li><a href="gskstartsend.htm">gsk_secure_soc_startSend()</a>--Start Asynchronous
Send Operation on a Secure Session<br>
<br>
</li>
<li><a href="gskstartinit.htm">gsk_secure_soc_startInit()</a>--Start asynchronous operation to
negotiate a secure session</li>
</ul>
<br>
<hr>
API introduced: V5R1
<hr>
<center>
<table cellpadding="2" cellspacing="2">
<tr align="center">
<td valign="middle" align="center"><a href="#Top_Of_Page">Top</a> |
<a href="unix.htm">UNIX-Type APIs</a> |
<a href="aplist.htm">APIs by category</a> </td>
</tr>
</table>
</center>
</body>
</html>