Consultor Eletrônico



Kbase P107542: 4GL/ABL: Error (9407) Reading socket server response using Secure Sockets Layer (SSL)
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   11/28/2008
Status: Verified

SYMPTOM(s):

4GL/ABL: Error (9407) Reading socket server response using Secure Sockets Layer (SSL)

Connection failure for host <host_name> port <port> transport <transport_name>. (9407)

The client server Secure Sockets Layer (SSL) connection is established between the client and the server successfully.

The client successfully sends data to the server.

The client is unable to read socket server response.

The error occurs when the client attempts to read the socket server response.

FACT(s) (Environment):

All Supported Operating Systems
OpenEdge 10.0B

CAUSE:

Bug# 20040401-019

FIX:

Upgrade to OpenEdge 10.1A and later. If upgrading to 10.1A or later is not feasible, a workaround for OpenEdge 10.0B is to use code similar to the following:
PROCEDURE ReadServerResponce.
/* Local Variables */
DEFINE VARIABLE mBuffer AS MEMPTR NO-UNDO.
DEFINE VARIABLE i-bytes-avail AS INTEGER NO-UNDO.
DEFINE VARIABLE i-read-bytes AS INTEGER NO-UNDO.
DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
DEFINE VARIABLE cHold AS CHARACTER NO-UNDO.

REPEAT:
IF NOT hsocket:CONNECTED() THEN DO:
c-error = "LOST CONNECTION TO SERVER".
LEAVE.
END. /* DO */

ASSIGN
i-bytes-avail = SELF:GET-BYTES-AVAILABLE().

IF i-bytes-avail = 0 THEN DO:
c-error = "NOTHING TO READ ON THE STACK".
LEAVE.
END. /* DO */

ASSIGN
i-read-bytes = 8192 /* Bug# 20040401-019 workaround - fixed in 10.1A */
SET-SIZE(mBuffer) = i-read-bytes
SET-BYTE-ORDER(mBuffer) = BIG-ENDIAN /* need to put this when going external*/
lOK = hsocket:READ (mBuffer,1,i-bytes-avail,READ-EXACT-NUM).

IF NOT lok THEN
c-error = "READ FROM SOCKET FAILED".

ASSIGN
cHold = GET-STRING(mBuffer,1)
cHold = substring(cHold,INDEX(cHold,"<?xml") - 1)
cHold = TRIM(cHold)
SET-SIZE(mBuffer) = LENGTH(cHold)
PUT-STRING(mBuffer,1) = cHold
m-outfile = mBuffer
SET-SIZE(mBuffer) = 0.

IF i-bytes-avail = SELF:BYTES-READ THEN /* Means Read was successful */
LEAVE.
END. /* REPEAT */
RUN CloseServerConnection.
END PROCEDURE.