OK, I have a resolution. This was a VERY old application, and the original compile JCL went missing. I put together new JCL and it appeared to work, but had this issue. It turns out that during the link edit phase, it actually found a module named EZASOKET and linked that module in. However, the proper way is to have an INCLUDE SYSLIB(EZACICAL) in the link edit which has the entry point required. Seems a bit awkward to have to do it that way, but I did find and old copy of the JCL afterward and that is what was used over 25 years ago.
Linking the program this way got everything working.
Original Message:
Sent: Mon October 21, 2024 01:42 PM
From: Leigh Compton
Subject: Sockets application
@Michael Lusicic -- this last set of definitions is what I would expect to work for your application. The definitions for the IBM-supplied programs match those provided in the CSD updates in hlq.SEZAINST(EZACICCT). Your listener transaction definition (PMTC) matches the default listener transaction of CSKL. And the program (OPPBSOCK) and transaction (PMCS) for your child server task match the recommended attributes -- and more importantly, they match what is successfully running in both internal IBM systems and in one customer system that I checked.
At this point, I can't explain why you are getting the ASRA abend. I would guess that there's invalid data in a pointer field, but this is simply a guess. The best thing to do at this point is to make sure that the internal trace table in CICS is fairly large and that a system dump is captured when the ASRA abend occurs. Opening a support case and submitting the system dump will allow our IBM support team to diagnose the cause of the program check.
------------------------------
Leigh Compton
Consulting IT Specialist - CICS and Enterprise Integration
IBM
Original Message:
Sent: Mon October 21, 2024 10:58 AM
From: Michael Lusicic
Subject: Sockets application
CEDA View PROGram( EZACIC00 )
PROGram : EZACIC00
Group : SOCKETS
DEScription : PRIMARY PROGRAM FOR TRANSACTION EZAO
Language : Assembler CObol | Assembler | Le370 | C | Pli
RELoad : No No | Yes
RESident : No No | Yes
USAge : Transient Normal | Transient
USElpacopy : No No | Yes
Status : Enabled Enabled | Disabled
RSl : 00 0-24 | Public
CEdf : Yes Yes | No
DAtalocation : Any Below | Any
EXECKey : Cics User | Cics
COncurrency : Quasirent Quasirent | Threadsafe | Required
Api : Cicsapi Cicsapi | Openapi
REMOTE ATTRIBUTES
DYnamic : No No | Yes
CEDA View PROGram( EZACIC01 )
PROGram : EZACIC01
Group : SOCKETS
DEScription : TASK RELATED USER EXIT <TRUE>
Language : Assembler CObol | Assembler | Le370 | C | Pli
RELoad : No No | Yes
RESident : Yes No | Yes
USAge : Normal Normal | Transient
USElpacopy : No No | Yes
Status : Enabled Enabled | Disabled
RSl : 00 0-24 | Public
CEdf : Yes Yes | No
DAtalocation : Any Below | Any
EXECKey : Cics User | Cics
COncurrency : Quasirent Quasirent | Threadsafe | Required
Api : Cicsapi Cicsapi | Openapi
REMOTE ATTRIBUTES
DYnamic : No No | Yes
CEDA View PROGram( EZACIC02 )
PROGram : EZACIC02
Group : SOCKETS
DEScription : IBM LISTENER
Language : Assembler CObol | Assembler | Le370 | C | Pli
RELoad : No No | Yes
RESident : Yes No | Yes
USAge : Normal Normal | Transient
USElpacopy : No No | Yes
Status : Enabled Enabled | Disabled
RSl : 00 0-24 | Public
CEdf : Yes Yes | No
DAtalocation : Any Below | Any
EXECKey : Cics User | Cics
COncurrency : Threadsafe Quasirent | Threadsafe | Required
Api : Cicsapi Cicsapi | Openapi
REMOTE ATTRIBUTES
DYnamic : No No | Yes
CEDA View TRANSaction( PMTC )
TRANSaction : PMTC
Group : BAS300TR
DEScription : TCPIP LISTENER TASK FOR EBASE
PROGram : EZACIC02
TWasize : 00000 0-32767
PROFile : DFHCICST
PArtitionset :
STAtus : Enabled Enabled | Disabled
PRIMedsize : 00000 0-65520
TASKDATALoc : Any Below | Any
TASKDATAKey : Cics User | Cics
STOrageclear : No No | Yes
RUnaway : System System | 0 | 250-2700000
SHutdown : Disabled Disabled | Enabled
ISolate : Yes Yes | No
Brexit :
CEDA View TRANSaction( PMCS )
TRANSaction : PMCS
Group : BAS300TR
DEScription : EBASE SOCKETS COMMUNICATION MODULE
PROGram : OPPBSOCK
TWasize : 00000 0-32767
PROFile : DFHCICST
PArtitionset :
STAtus : Enabled Enabled | Disabled
PRIMedsize : 00000 0-65520
TASKDATALoc : Any Below | Any
TASKDATAKey : User User | Cics
STOrageclear : No No | Yes
RUnaway : System System | 0 | 250-2700000
SHutdown : Disabled Disabled | Enabled
ISolate : Yes Yes | No
Brexit :
CEDA View PROGram( OPPBSOCK )
PROGram : OPPBSOCK
Group : BAS300PP
DEScription : EBASE SOCKETS SERVER CHILD
Language : CObol CObol | Assembler | Le370 | C | Pli
RELoad : No No | Yes
RESident : No No | Yes
USAge : Normal Normal | Transient
USElpacopy : No No | Yes
Status : Enabled Enabled | Disabled
RSl : 00 0-24 | Public
CEdf : Yes Yes | No
DAtalocation : Any Below | Any
EXECKey : User User | Cics
COncurrency : Quasirent Quasirent | Threadsafe | Required
Api : Cicsapi Cicsapi | Openapi
REMOTE ATTRIBUTES
DYnamic : No No | Yes
Same results:
EZY1325I 10/21/24 09:49:29 START SUCCESSFUL TRANID= PMCS PARTNER INET ADDR=172.28.255.171 PORT= 55921
094929 OPPBSOCK TASK # 0000055 ENTERING OPPBSOCK
094929 OPPBSOCK TASK # 0000055 ENTERING A100-INITIALIZE
094929 OPPBSOCK TASK # 0000055 TCPSOCKET-PARM
094929 OPPBSOCK TASK # 0000055 CICSC2 00052L
094929 OPPBSOCK TASK # 0000055 0000CCCECF4400FFFFFD444444444444444444444444444444
094929 OPPBSOCK TASK # 0000055 00033932320013000523000000000000000000000000000000
094929 OPPBSOCK TASK # 0000055 TAKING SOCKET
DFHDU0203I 10/21/2024 09:49:29 CICSC2 A transaction dump was taken for dumpcode: ASRA, Dumpid: 1/0006, Tranid: PMCS, Tranum:
00000055, Program: OPPBSOCK.
------------------------------
Michael Lusicic
VP IS
Computrol LLC
Saint Louis MO
314-378-9805
Original Message:
Sent: Fri October 18, 2024 05:04 PM
From: Ian Burnett
Subject: Sockets application
Hi Michael,
What are your EXECKEY attributes on the CICS definitions for the EZACIC00/01/02 programs? They must all be EXECKEY(CICS):
https://www.ibm.com/docs/en/zos/2.5.0?topic=SSLTBW_2.5.0/com.ibm.zos.v2r5.halc001/ipciccfg_strg_protect.html
Set PMTC to TASKDATAKEY(CICS) - this is your equivalent of the CSKL transaction: https://www.ibm.com/docs/en/zos/2.5.0?topic=dctr-using-storage-protection-when-running-cics-330-later
You should then be able to set PMCS to TASKDATAKEY(USER) and OPPBSOCK to EXECKEY(USER).
Regards,
Ian
------------------------------
Ian Burnett
Original Message:
Sent: Fri October 18, 2024 03:29 PM
From: Michael Lusicic
Subject: Sockets application
Let me try this from the top with text rather than pictures.
Here is the TCP Config definitions. I have 3 CICS regions defined, but I am only using one, so the following is for that region:
CICS region: CICSC2
Listener Transaction: PMTC
Port: 22741
Child Transaction: PMCS
EZACICD TYPE=INITIAL, START OF MACRO ASSEMBLY INPUR X
FILENAME=EZACICDF, DD NAME FOR CONFIGURATION FILE X
PROGRAM=EZACICDF NAME OF BATCH PROGRAM TO RUN
EZACICD TYPE=CICS, CICS RECORD DEFINITION X
APPLID=CICSC2, APPLID OF CICS REGION NOT USING X
TCPADDR=TCPIP, JOB/STEP NAME FOR TCP/IP X
NTASKS=20, NUMBER OF SUBTASKS X
DPRTY=0, SUBTASK DISPATCH PRIORITY DIF X
CACHMIN=15, MINIMUM REFRESH TIME FOR CACHE X
CACHMAX=30, MAXIMUM REFRESH TIME FOR CACHE X
CACHRES=10, MAXIMUM NUMBER OF RES RESOLVERS X
ERRORTD=CSMT, TD QUEUE FOR ERROR MSGS X
TCBLIM=0, OPEN API TCB LIMIT X
OTE=YES, OPEN TRANSACTION ENVIRONMENT X
TRACE=NO, NO CICS TRACE RECORDS X
SMSGSUP=NO STARTED MESSAGES SUPPRESSED?
EZACICD TYPE=LISTENER, LISTENER RECORD DEFINITION X
FORMAT=ENHANCED, ENHANCED LISTENER X
APPLID=CICSC2, APPLID OF CICS REGION X
LAPPLD=NO , REGISTER APPLICATION DATA X
TRANID=PMTC, TRANSACTION NAME FOR LISTENER X
PORT=22741, PORT NUMBER FOR LISTENER X
AF=INET, LISTENER ADDRESS FAMILY X
IMMED=YES, LISTENER STARTS UP AT INIT? X
BACKLOG=20, BACKLOG VALUE FOR LISTENER X
NUMSOCK=50, # OF SOCKETS SUPPORTED BY LSTNR X
ACCTIME=30, TIMEOUT VALUE FOR ACCEPT X
GIVTIME=30, TIMEOUT VALUE FOR GIVESOCKET X
REATIME=30, TIMEOUT VALUE FOR READ X
CSTRAN=PMCS, NAME OF CHILD IPV4 SERVER TRANN X
CSSTTYP=KC, CHILD SERVER STARTUP TYPE X
CSDELAY=000000, CHILD SERVER DELAY INTERVAL X
MSGLEN=0, LENGTH OF INPUT MESSAGE X
PEEKDAT=NO, PEEK OPTION X
MSGFORM=ASCII OUTPUT MESSAGE FORMAT
- SECEXIT=OPPBSECX NAME OF SECURITY EXIT PROGRAM
NOTE: I have tried OTE= YES and OT=NO and get the same results. I have also used LAPPLD=YES and left it out altogether. No change.
Transaction definitions for the LISTENER and Child:
CEDA View TRANSaction( PMTC )
TRANSaction : PMTC
Group : BAS300TR
DEScription : TCPIP LISTENER TASK FOR EBASE
PROGram : EZACIC02
TWasize : 00000 0-32767
PROFile : DFHCICST
PArtitionset :
STAtus : Enabled Enabled | Disabled
PRIMedsize : 00000 0-65520
TASKDATALoc : Any Below | Any
TASKDATAKey : User User | Cics
STOrageclear : No No | Yes
RUnaway : System System | 0 | 250-2700000
SHutdown : Disabled Disabled | Enabled
ISolate : Yes Yes | No
Brexit :
CEDA View TRANSaction( PMCS )
TRANSaction : PMCS
Group : BAS300TR
DEScription : EBASE SOCKETS COMMUNICATION MODULE
PROGram : OPPBSOCK
TWasize : 00000 0-32767
PROFile : DFHCICST
PArtitionset :
STAtus : Enabled Enabled | Disabled
PRIMedsize : 00000 0-65520
TASKDATALoc : Any Below | Any
TASKDATAKey : User User | Cics
STOrageclear : No No | Yes
RUnaway : System System | 0 | 250-2700000
SHutdown : Disabled Disabled | Enabled
ISolate : Yes Yes | No
Brexit :
Here is the program definition:
CEDA View PROGram( OPPBSOCK )
PROGram : OPPBSOCK
Group : BAS300PP
DEScription : EBASE SOCKETS SERVER CHILD
Language : CObol CObol | Assembler | Le370 | C | Pli
RELoad : No No | Yes
RESident : No No | Yes
USAge : Normal Normal | Transient
USElpacopy : No No | Yes
Status : Enabled Enabled | Disabled
RSl : 00 0-24 | Public
CEdf : Yes Yes | No
DAtalocation : Any Below | Any
EXECKey : User User | Cics
COncurrency : Quasirent Quasirent | Threadsafe | Required
Api : Cicsapi Cicsapi | Openapi
I wrote message to the message queue to track down where the error occurs. Here is the code in the program:
MOVE TSP-LSTN-NAME TO CIDL-NAME.
MOVE TSP-LSTN-SUBTASKNAME TO CIDL-SUBTASKNAME.
MOVE TSP-GIVE-TAKE-SOCKET TO SOC-SOCKET-ID.
*-->
*
MOVE 'TAKING SOCKET' TO MSG-MESSAGE.
PERFORM S000-LOG-ERROR THRU S000-EXIT
*<--
CALL 'EZASOKET' USING TCPL-TAKE-SOCKET
SOC-SOCKET-ID
CLIENTID-LISTENER
SIP-ERROR-NO
SIP-RETURN-CODE.
*-->
*
MOVE 'RET TAKE SOCKET' TO MSG-MESSAGE.
PERFORM S000-LOG-ERROR THRU S000-EXIT
*<--
Here is the output to the message queue after starting the listener and sending a message to the listener:
EZY1258I 10/18/24 11:11:43 EZACIC01 ENTRY POINT IS 1CFE84A0
EZY1258I 10/18/24 11:11:43 TRU00000 ENTRY POINT IS 1CFE3FF0
EZY1291I 10/18/24 11:11:43 LISTENER TRANSACTION= PMTC TASKID= 0000056L ACCEPTING REQUESTS VIA PORT 22741
EZY1325I 10/18/24 11:15:43 START SUCCESSFUL TRANID= PMCS PARTNER INET ADDR=172.28.255.46 PORT= 61078
111543 OPPBSOCK TASK # 0000058 ENTERING OPPBSOCK
111543 OPPBSOCK TASK # 0000058 ENTERING A100-INITIALIZE
111543 OPPBSOCK TASK # 0000058 TCPSOCKET-PARM
111543 OPPBSOCK TASK # 0000058 CICSC2 00056L
111543 OPPBSOCK TASK # 0000058 0000CCCECF4400FFFFFD444444444444444444444444444444
111543 OPPBSOCK TASK # 0000058 00013932320011000563000000000000000000000000000000
111543 OPPBSOCK TASK # 0000058 TAKING SOCKET
DFHDU0203I 10/18/2024 11:15:43 CICSC2 A transaction dump was taken for dumpcode: ASRA, Dumpid: 1/0002, Tranid: PMCS, Tranum:
00000058, Program: OPPBSOCK.
DFHAC2236 10/18/2024 11:15:43 CICSC2 Transaction PMCS transaction number 00058 abend ASRA in program OPPBSOCK term ????. Updates to
local recoverable resources will be backed out.
Note that it runs, but only until it tries to do a TAKESOCKET.
Now I go in and make changes to the transactions and program to go from User to CICS as follows:
CEDA ALter TRANSaction( PMTC )
TRANSaction : PMTC
Group : BAS300TR
DEScription ==> TCPIP LISTENER TASK FOR EBASE
PROGram ==> EZACIC02
TWasize ==> 00000 0-32767
PROFile ==> DFHCICST
PArtitionset ==>
STAtus ==> Enabled Enabled | Disabled
PRIMedsize : 00000 0-65520
TASKDATALoc ==> Any Below | Any
TASKDATAKey ==> Cics User | Cics
STOrageclear ==> No No | Yes
RUnaway ==> System System | 0 | 250-2700000
SHutdown ==> Disabled Disabled | Enabled
ISolate ==> Yes Yes | No
Brexit ==>
CEDA ALter TRANSaction( PMCS )
TRANSaction : PMCS
Group : BAS300TR
DEScription ==> EBASE SOCKETS COMMUNICATION MODULE
PROGram ==> OPPBSOCK
TWasize ==> 00000 0-32767
PROFile ==> DFHCICST
PArtitionset ==>
STAtus ==> Enabled Enabled | Disabled
PRIMedsize : 00000 0-65520
TASKDATALoc ==> Any Below | Any
TASKDATAKey ==> Cics User | Cics
STOrageclear ==> No No | Yes
RUnaway ==> System System | 0 | 250-2700000
SHutdown ==> Disabled Disabled | Enabled
ISolate ==> Yes Yes | No
Brexit ==>
CEDA ALter PROGram( OPPBSOCK )
PROGram : OPPBSOCK
Group : BAS300PP
DEScription ==> EBASE SOCKETS SERVER CHILD
Language ==> CObol CObol | Assembler | Le370 | C | Pli
RELoad ==> No No | Yes
RESident ==> No No | Yes
USAge ==> Normal Normal | Transient
USElpacopy ==> No No | Yes
Status ==> Enabled Enabled | Disabled
RSl : 00 0-24 | Public
CEdf ==> Yes Yes | No
DAtalocation ==> Any Below | Any
EXECKey ==> Cics User | Cics
COncurrency ==> Quasirent Quasirent | Threadsafe | Required
Api ==> Cicsapi Cicsapi | Openapi
REMOTE ATTRIBUTES
I now try sending to the listener the exact same thing as last time, and get this in the message queue:
EZY1258I 10/18/24 11:29:41 EZACIC01 ENTRY POINT IS 1CFE84A0
EZY1258I 10/18/24 11:29:41 TRU00000 ENTRY POINT IS 1CFE3FF0
EZY1291I 10/18/24 11:29:41 LISTENER TRANSACTION= PMTC TASKID= 0000069L ACCEPTING REQUESTS VIA PORT 22741
EZY1325I 10/18/24 11:30:03 START SUCCESSFUL TRANID= PMCS PARTNER INET ADDR=172.28.255.46 PORT= 61634
113003 OPPBSOCK TASK # 0000070 ENTERING OPPBSOCK
113003 OPPBSOCK TASK # 0000070 ENTERING A100-INITIALIZE
113003 OPPBSOCK TASK # 0000070 TCPSOCKET-PARM
113003 OPPBSOCK TASK # 0000070 CICSC2 00069L
113003 OPPBSOCK TASK # 0000070 0000CCCECF4400FFFFFD444444444444444444444444444444
113003 OPPBSOCK TASK # 0000070 00013932320011000693000000000000000000000000000000
113003 OPPBSOCK TASK # 0000070 TAKING SOCKET
113004 OPPBSOCK TASK # 0000070 RET TAKE SOCKET
113004 OPPBSOCK TASK # 0000070 SET SO_LINGER
113004 OPPBSOCK TASK # 0000070 ENTERING B000-PROCESS-SESSION
113004 OPPBSOCK TASK # 0000070 ENTERING B100-PROCESS-STREAM
113004 OPPBSOCK TASK # 0000070 PACKET TARGET0000000013
113004 OPPBSOCK TASK # 0000070 READING PACKE0000000013
113004 OPPBSOCK TASK # 0000070 PACKET HEADER
113004 OPPBSOCK TASK # 0000070 EBCHDR 00025
113004 OPPBSOCK TASK # 0000070 CCCCCD44FFFFF
113004 OPPBSOCK TASK # 0000070 5238490000025
You can see that now it gets to the RET TAKE SOCKET message. It continues to run as expected.
Something is happening in the call to EZASOKET. The ASRA is somewhere outside the program OPPBSOCK.
------------------------------
Michael Lusicic
VP IS
Computrol LLC
Saint Louis MO
314-378-9805
Original Message:
Sent: Wed October 16, 2024 05:10 PM
From: Leigh Compton
Subject: Sockets application
There is no requirement that the started task (the child server task) run with TASKDATAKEY(CICS).
Examining a current implementation, the listener task is running with TASKDATAKEY(CICS) and all the child server tasks are running with TASKDATAKEY(USER).
So, it appears that there may be something unusual in this sockets implementation that is causing the child server task to need to run in CICS key.
Note that the TRANSACTION resource and the PROGRAM resources used within that transaction (the child server task) should agree on TASKDATAKEY and EXECKEY. But there's no CICS requirement that two separate tasks (the STARTing task and the STARTed task) have the same key assignment.
------------------------------
Leigh Compton
Consulting IT Specialist - CICS and Enterprise Integration
IBM
Original Message:
Sent: Wed September 25, 2024 12:33 PM
From: Michael Lusicic
Subject: Sockets application
I had a CICS Sockets application that ran 20 years ago. I tried bringing it up to date, and ran into many complications. Here is my current issue.
I use the supplied IBM Listener with a child task. When it tries to start the child task, I get an error because the listener task runs with TASKDATAKEY=CICS, and the child task has TASKDATAKEY=User. I changed the child task to match, and the program it starts gets an error because the EXECKey is User. I changed that to EXECKey=CICS, then it get an error whenever it tries to link to a program because the EXECKey for those is User and not CICS. The programs it links to are used by terminal transactions and should not have to have an EXECKey of CICS. How can I get this to switch between TASKDATAKEY=CICS which is required by the sockets listener and its child and get into a User mode.
------------------------------
Michael Lusicic
------------------------------