Fix8 configure options:
An application works fine with fix8-0.9.6 but does not work correctly with fix8-1.0.0. A logout is triggered, log file extract below:
0000003 out 2014-01-17 05:22:59.904021473 Connection successful
0000004 out 2014-01-17 05:22:59.904107855 Session connected
0000005 out 2014-01-17 05:22:59.908471896 Client setting heartbeat interval to 30
0000006 out 2014-01-17 05:22:59.908625429 Heartbeat interval is 30
0000007 out 2014-01-17 05:23:37.125441249 Have not received anything from remote for 37 secs. Sending test request
0000008 out 2014-01-17 05:23:38.133506393 Remote has ignored my test request. Aborting session...
It appears that the FixReader is successfully reads Logon and UserRequest messages but hangs when reading TradingSessionStatus message (length 14326 bytes) and therefore is unable to read any further incoming messages.
Substituting the function definition for FIXReader::sockRead from fix8-0.9.6 into fix8-1.0.0 fixes the above issue.
The hang happens at:
rdsz = _sock->receiveBytes(_read_buffer_wptr, maxremaining);
The values of the variables at the time of hang:
maxremaining = 16384
At beginning of each iteration, value of remaining:
Hang here at rdsz = _sock->receiveBytes(_read_buffer_wptr, maxremaining);
Substituting remaining instead of maxremaining also fixes the issue,i.e.:
rdsz = _sock->receiveBytes(_read_buffer_wptr, remaining);