967 lines
23 KiB
HTML
967 lines
23 KiB
HTML
|
<!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>
|
||
|
Syntax
|
||
|
|
||
|
<pre>
|
||
|
#include <gskssl.n>
|
||
|
#include <qsoasync.h
|
||
|
|
||
|
int <em>QsoWaitForIOCompletion</em> (int IOCompletionPort,
|
||
|
Qso_OverlappedIO_t * completionStatus,
|
||
|
struct timeval * timeToWait)
|
||
|
|
||
|
</pre>
|
||
|
|
||
|
<br>
|
||
|
Service Program Name: QSOSRV3<br>
|
||
|
<!-- iddvc RMBR -->
|
||
|
<br>
|
||
|
Default Public Authority: *USE<br>
|
||
|
<!-- iddvc RMBR -->
|
||
|
<br>
|
||
|
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>>= 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 > 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 >= 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 &1 in library
|
||
|
&2 ended. Reason code &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>
|
||
|
|