The TCP/IP CICS sockets parameters ACCTIME, GIVTIME and REATIME can be customised for use with the listener.
Those values are read from the EZACONFG file but can also be overridden in the listener user exits TIRSLTMX and TIRSLEXT.
The suggested default values in those exits are as follows and can be used for ACCTIME, GIVTIME and REATIME in EZACONFG:
ACCTIME = 9 seconds (TIRSLTMX)
GIVTIME = 20 seconds (TIRSLEXT)
REATIME = 5 seconds (TIRSLTMX)
NOTE: Such values are only a guideline and optimal values for the 3 parameters will be very much dependent on the specific application design and environment. Therefore, determination of the optimal values requires performing site-specific testing.
When setting the timeout values, the following behaviour should be considered:
- If REATIME = 0 is set in the file EZACONFG and this is not updated in exit TIRSLTMX, the timeout will be interpreted as zero seconds and not as 'checking for read timeout is not performed', which might be inferred by the IBM CICS Sockets Guide: z/OS 2.4.0 > z/OS Communications Server > Abstract for Comm Svr: IP CICS Sockets Guide
- When performing security validation in TIRSLEXT and that validation fails then the TISL will not process any new requests until the REATIME has been reached.
- If the REATIME is set too low (for the system) then the handover of the socket to the server manager may fail and the following format error messages are written to the CICS log:
INCOMING MESSAGE DID NOT HAVE ANY DATA; SOCKET CLOSED
NOTE: This message may appear twice.
- The following non-fatal error can occur when the listener takes the socket back thinking the server is not going to take it and the server tries to take the socket after the listener has taken it back:
TISRVLIS TASK=00000035 04/15/2008 13:00:31 GIVESOCKET NOT TAKEN FOR SERVER ...... TASK=00062781 04/15/2008 13:00:31 TIRSIPIN SOCKET ERROR TAKESOCKET RETCODE=-0000001 ERRNO= 113.... TASK=00062781 04/15/2008 13:00:31 TIRSIPOT CICS ERROR: READ TSQSIP# FAILED EIBRESP = 44 EIBRESP2
To try to prevent this error:
Either: Increase GIVTIME in EZACONFG or increase GIVESOCKET in user exit TIRSLEXT. If not already set at the suggested default value of 20 seconds test that, otherwise increase by 10 seconds at a time until the problem is resolved.
Or: Decrease READ timeout setting in server user exit TIRSIPEX
- The read timeout in TIRSLTMX is used by the listener to determine if the socket has data to READ/RECV.
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, the following fatal errors will occur in the 'DEST-ERR' TDQ specified in TIRSIPEX (default CSSL):
XXXXXXXX TASK=00000174 08/04/2008 14:14:13 TIRSIPIN SOCKET ERROR SELECT TIMEOUT RETCODE=+0000000 ERRNO= 00XXXXXXXX TASK=00000174 08/04/2008 14:14:13 TIRSIPOT SOCKET ERROR WRITE RETCODE=-0000001 ERRNO= 1027XXXXXXXX TASK=00000174 08/04/2008 14:14:13 TIRSIPOT SOCKET CLOSED ERROR - CLOSE
This is normally accompanied by TCP 10054 errors at the client, even after multiple retries for the same transaction.
The resolution is to increase WORK-SELECT-MICROSEC-DEF (default 100) or WORK-SELECT-SECS-DEF (default 0) in TIRSIPEX until the problem is resolved.
If the problem is intermittent in nature, needing to increase these values may indicate a network performance problem
- When using the Microseconds parameter in the TIRSLTMX then need to take into account that this is used in conjunction with the Seconds parameter so if wish to set an overall value of 0.5 seconds, apart from setting the Microseconds to 500000 in the exit, the seconds value must be set to 0 in either in the exit or in the EZACONFG.
- The EZACONFG and TIRSLTMX are read once at the beginning of the process. Any changes to either require that the listener be stopped and restarted for the new values to be used. The TIRSLEXT is read on every server request, so can be changed while the listener is running. TIRSIPEX is a server runtime exit, so it is read by each server task and its timeout value used. If TIRSIPEX is changed, the changed value is used by any new server tasks started after the DLL containing TIRSIPEX is re-deployed.