HP OpenVMS Systems

ask the wizard
Content starts here

Programming IP, Protocols?

» close window

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
 illustrate this?
Bob Ahrens
Bob Ahrens
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.

answer written or last revised on ( 22-SEP-2002 )

» close window