Recently implemented the Gen CICS Sockets Server Listener TISRVLIS (TISL) in a project and some transactions are encountering the below error:
TRLM0098 TASK=00091304 05/22/2018 11:00:51 TIRSIPIN SOCKET ERROR SELECT TIMEOUT
TRLM0071 TASK=00093749 05/22/2018 11:09:10 TIRSIPIN SOCKET ERROR SELECT TIMEOUT
TRLM0010 TASK=00088270 05/22/2018 15:24:55 TIRSIPIN SOCKET ERROR SELECT TIMEOUT
The error message indicates that the timeout parameter(s) in the CICS Sockets Server Listener exit TIRSIPEX (Gen 8.x CEHBSAMP library) need to be modified.
The select timeout in TIRSIPEX is used by the server runtime to determine how long to wait for data to arrive on the socket before deciding not issue a socket READ/RECV. If the server manager select timeout in TIRSIPEX expires before the data from the client was able to be read, then the message "TIRSIPIN SOCKET ERROR SELECT TIMEOUT" will occur.
The fact that the problem only exists for some transactions is because those transactions have more data being sent from the client than others i.e. the server needs more time to read the data and therefore the select timeout needs to be larger to allow that.
In user exit TIRSIPEX increase the value of SELECT-TIMEOUT-SECS from default 0 to 1
(the value of SELECT-TIMEOUT-MICROSEC value can remain as the default of 100 milliseconds)
After edit of TIRSIPEX follow the steps to rebuild the code with MKUEXITS and deploy the new TIRSIPEZ DLL.
NOTE: This advice is valid for both the CICS (single) Sockets Server Listener TISRVLIS (TISL) and the CICS Multi Socket Server Listener TISRVMSL (TIML).
Additionally, regarding performance concerns due to increasing the value of SELECT-TIMEOUT-SECS from 0 to 1 within the user exit TIRSIPEX...The prescribed changes should NOT cause a performance issue as the wait time controlled by the timeout ends as soon as the data arrives, so it would not take any longer than it takes for the existing transactions that run successfully. And, it will allow extra time for those few transactions that have larger data. In fact, it potentially could improve performance because those transactions that are currently timing out and causing a rollback activity will now work, thus reducing processing time.
1. Related documentation links for Gen 8.6:
CA Gen 8.6 > Reference > User Exits > z/OS User Exits
CA Gen 8.6 > Reference > User Exits > z/OS User Exits > z/OS Server User Exits - CICS > TIRSIPEX - CICS Sockets Server Exit
CA Gen 8.6 > Reference > User Exits > z/OS User Exits > Customizing and Installing z/OS User Exits > MKUEXITS - Make COBOL Runtimes (User Exits DLLs)
NOTE: The same user exits are used for both TISRVLIS (TISL) and TISRVMSL (TIML)
2. Related KB article: Gen CICS Sockets Server Listeners (TISRVLIS/TISRVMSL) timeout parameters