![]() |
![]() HP OpenVMS Systemsask the wizard |
![]() |
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? Thanks, 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.
|