Consultor Eletrônico



Kbase P103854: What is really behind the 778 error and is it caused by a Progress timeout?
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   11/18/2008
Status: Verified

GOAL:

What does Progress error 778 mean?

GOAL:

Is there a timeout between a Progress client and Remote Server that can cause socket errors?

GOAL:

Do Progress clients and Remote Servers send acknowledgements between the processes?

GOAL:

How are messages sent between clients and remote server processes?

FACT(s) (Environment):

Progress 9.x
OpenEdge 10.x
All Supported Operating Systems

FIX:

Progress error message 778 reads as follows:

Error <read/writing>%s socket, ret=%i<n>, errno=%E<n>. (778)

This error is due to a problem with a read() or write() function on the socket. This error is not being caused by Progress. This error can occur on systems with TCP/IP communication between the server and client. The error is indicative of a problem on the network layer. This error is not associated with a timeout being imposed by Progress. This error occurs because we a processing a socket read or write error.

A Progress client when communicating with a server, will create a message. The message depending upon its size may be broken into fragments and each fragment is sent across the wire. The header of the message indicates the size of the message being sent/received. The server polls on a socket level
to see if there are any incoming messages. If there are, it blocks on the read of the message. The server will continue to read the message until the end of the message, based on the size recorded in the header of the message. We will read/write one fragment using the read() or write() system call and then loop around again to read/write the next fragment. We will continue this process until the whole message has been sent/received. The server will then perform the necessary action and send the results back to the client using this same methodology.

There is no acknowledgement being sent between the client and server with regards to if it received a message or not. Any acknowledgements or handshaking is performed on a socket level at the TCP layer. But it is not being done within Progress.

The 778 message is printed by Progress, but is the result of getting a negative return code from the read() or write() operating system call on a socket. The read() call is equivalent to a recv() call with no flags set, and the write() call is equivalent to a send() with no flags set. When the recv() or send() system call fails, we take the return code from that call and record it in the 778 message. The error indicates a problem at the OS networking level, not on the Progress level. The return code and errno reported in the 778 error can help Progress Technical Support provide you additional information about where the failure occurred on a networking layer.