The Question is:
I have written a socket program on OpenVMS that
uses the QIO system service interface to send data to a windows 2000 client.
The program works well except when it encounters the above error(
SYSTEM-F-SUSPENDED, process is suspended) when using the IO$_WRITEVBLK
function of the SYS$QIOW system service
routine with the IO$M_NOWAIT modifier to sends data to the client. This error
comes back in the first word of the Io status block. The documentation states
that the reason for this status is that:
'The system detected a condition that might cause the operation to block.'
It also states :
'Regardless of a $QIO or $QIOW, if the system detects a condition that would
cause the operation to block, the system completes the I/O operation and
returns the SS$_SUSPENDED status code.
When using this function modified, always check the message length in the IOSB
to ensure that all data is transferred. IO$_WRITEVBLK returns a success status
even if data is only partially transferred.'
So I say fine, that means I need to check the second word of the IOSB at this
point, see how much of the message was sent, and try to send the rest of the
message, but that doesn't seem to work... The client doesn't see an
uninterrupted stream of data whe
n I implement
that logic, in fact it seems to lose part of the preceding message. What is
the proper technique for handling this event ? Do I need to cancel all io on
the channel? How do I know
what got sent to the client? How do I know when
the interface is ready to accept data again? Are there any code examples to
this condition occurs when for some reason the
The Answer is :
You are implementing your own network protocol, of course.
Please consider reading one of the available college texts on
network flow control and network protocol implementations.
These texts discuss the various issues and considerations
involved with networking and with network flow control schemse.
It would appear the remote host is not able to receive the IP
(UDP?) message, hence you will need to maintain the state of the
connection and retransmit as necessary. (A technique known
as a sliding window is one of the more common approaches used
within TCP itself.)
Alternatively, consider using an available network protocol
or middleware package. (The OpenVMS Wizard prefers this
approach, having written and maintained networking protocols
and having used commercial protocol packages. Depending on
the particular applicatin requirements, TCP may well provide
the required flow control.)
Your OpenVMS and TCP/IP Services versions should be upgraded
to more current versions, as both are no longer current versions.
If you continue with these versions (or if you upgrade), please
apply the mandatory ECO kits.