Kbase P59196: 4GL socket is not working when sending second message
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  16/10/2008 |
|
Status: Unverified
SYMPTOM(s):
4GL socket is not working when sending second message
FIX:
A READ RESPONSE procedure should be created in order to attend every client request, if there are no READ RESPONSE procedure and you try to implement inside the connection procedure, logic will be executed only one time when connection is established.
Example program:
DEF VAR cRegistro AS CHAR FORM "x(30)" INIT "" NO-UNDO.
DEF VAR hSocket AS HANDLE NO-UNDO.
DEF VAR lrc AS LOG NO-UNDO.
DEF VAR mData AS MEMPTR NO-UNDO.
DEF VAR sending AS LOGICAL NO-UNDO.
DEF VAR start-etime AS INTEGER NO-UNDO.
CREATE SERVER-SOCKET hSocket.
lrc = hSocket:SET-CONNECT-PROCEDURE('myconn').
lrc = hSocket:ENABLE-CONNECTIONS('-S ' + "60000") NO-ERROR.
WAIT-FOR CLOSE OF THIS-PROCEDURE.
hSocket:DISCONNECT() NO-ERROR.
SET-SIZE(mData) = 0.
HIDE ALL NO-PAUSE.
RETURN.
PROCEDURE myconn:
DEF INPUT PARAMETER hConexao AS HANDLE NO-UNDO.
hconexao:SET-READ-RESPONSE-PROCEDURE('getData',THIS-PROCEDURE).
PROCEDURE getData:
DEF VAR mData AS MEMPTR NO-UNDO.
DEF VAR mysocket AS HANDLE.
DEF VAR iTam AS INT NO-UNDO INITIAL 10.
mysocket = SELF:HANDLE.
SET-SIZE(mData) = 10000.
SET-BYTE-ORDER(mData) = BIG-ENDIAN.
mysocket:READ(mData,1,10000,1).
iTam = mysocket:BYTES-READ.
ASSIGN cRegistro = GET-STRING(mData,1,iTam).
DISP STRING(mysocket) "-" cRegistro WITH NO-LABELS NO-BOX CENTERED.
END.